Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python将字符串解析为字典_Python_Json_String_Parsing_Dictionary - Fatal编程技术网

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']}