Python将字符串解析为字典
我有以下字符串:Python将字符串解析为字典,python,json,string,parsing,dictionary,Python,Json,String,Parsing,Dictionary,我有以下字符串: "[['Categories', [['180972'], ['180800'], ['16228'], ['32733'], ['32789'], ['32833'], ['325137'], ['32839'], ['25329'], ['42605'], ['428240849'], ['5101'], ['568'], ['570716'], ['57116'], ['57080545404'], ['57083134076']]], ['Tags', ['Stock'
"[['Categories', [['180972'], ['180800'], ['16228'], ['32733'], ['32789'], ['32833'], ['325137'], ['32839'], ['25329'], ['42605'], ['428240849'], ['5101'], ['568'], ['570716'], ['57116'], ['57080545404'], ['57083134076']]], ['Tags', ['Stock', 'Color', 'Fam', 'Dress','Maxi']], ['Type', ['Luxary']], ['Vendor', ['AAA']]]"
我想将其解析为dict/json。
最好的方法是什么?尝试将其转换为dict:
data= "[['Categories', [['180972'], ['180800'], ['16228'], ['32733'], ['32789'], ['32833'], ['325137'], ['32839'], ['25329'], ['42605'], ['428240849'], ['5101'], ['568'], ['570716'], ['57116'], ['57080545404'], ['57083134076']]], ['Tags', ['Stock', 'Color', 'Fam', 'Dress','Maxi']], ['Type', ['Luxary']], ['Vendor', ['AAA']]]"
data = eval(data)
d={}
for i in data:
d[i[0]] = [x for x, in i[1]] if isinstance(i[1][0], list) else i[1]
输出将是:
{'Categories':
['180972',
'180800',
'16228',
'32733',
'32789',
'32833',
'325137',
'32839',
'25329',
'42605',
'428240849',
'5101',
'568',
'570716',
'57116',
'57080545404',
'57083134076'],
'Tags': ['Stock', 'Color', 'Fam', 'Dress', 'Maxi'],
'Type': ['Luxary'],
'Vendor': ['AAA']
}
您可以使用
ast.literal\u eval
计算字符串并返回Python对象(如果语法正确)
如果您还想删除内部列表,请使用,而不是只调用对象上的dict
。这如何
>>> import itertools
>>> import ast
>>> import pprint
>>> i = ast.literal_eval(s)
>>> d = {k[0]:list(itertools.chain(*k[1])) if isinstance(k[1][0], list) else list(k[1]) for k in i}
>>> pprint.pprint(d)
{'Categories': ['180972',
'180800',
'16228',
'32733',
'32789',
'32833',
'325137',
'32839',
'25329',
'42605',
'428240849',
'5101',
'568',
'570716',
'57116',
'57080545404',
'57083134076'],
'Tags': ['Stock', 'Color', 'Fam', 'Dress', 'Maxi'],
'Type': ['Luxary'],
'Vendor': ['AAA']}
@Graipher它是一个字符串,请参见我的编辑?@Aprillion:它似乎是一个无效的JSON字符串…@Graipher simple将
'
替换为“
仅对您自己创建的文本使用eval
,或确认自己的文本是安全的,而不是来自未知或不受信任的源。
>>> import itertools
>>> import ast
>>> import pprint
>>> i = ast.literal_eval(s)
>>> d = {k[0]:list(itertools.chain(*k[1])) if isinstance(k[1][0], list) else list(k[1]) for k in i}
>>> pprint.pprint(d)
{'Categories': ['180972',
'180800',
'16228',
'32733',
'32789',
'32833',
'325137',
'32839',
'25329',
'42605',
'428240849',
'5101',
'568',
'570716',
'57116',
'57080545404',
'57083134076'],
'Tags': ['Stock', 'Color', 'Fam', 'Dress', 'Maxi'],
'Type': ['Luxary'],
'Vendor': ['AAA']}