我有一个字典列表,其值为一些元组:
dic1 = {
'persuaded ': [[('teacher', '6'), ('group', '5'), ('man', '5'), ('girl', '5')]],
'removed ': [[('apple', '5'), ('makeup', '4'), ('trash', '4'), ('stain', '4')]]
}
我需要做的是将嵌套元组转换为字典,以便我可以使用密钥将其与其他类似列表进行比较。理想的结果将是:
dic2 = {
'persuaded ': [{'teacher': '6'}, {'group': '5'}, {'man': '5'}, {'girl': '5'}],
'removed ': [{'apple': '5'}, {'makeup': '4'}, {'trash': '4'}, {'stain': '4'}]
}
我试过了:
dic2 = {}
for x, y in dic1_zipped:
d.setdefault(x, []).append(y)
和
from collections import defaultdict
dic2= defaultdict( list )
for n,v in dic1_zipped:
fq[n].append(v)
但是在字典里都没有深入。我真的很感激有关如何解决这个问题的任何建议!谢谢!
答案 0 :(得分:2)
以下嵌套字典和列表推导将为您完成:
dic2 = {key: [{k: v} for sublist in value for k, v in sublist] for key, value in dic1.items()}
演示:
>>> {key: [{k: v} for sublist in value for k, v in sublist] for key, value in dic1.items()}
{'removed ': [{'apple': '5'}, {'makeup': '4'}, {'trash': '4'}, {'stain': '4'}], 'persuaded ': [{'teacher': '6'}, {'group': '5'}, {'man': '5'}, {'girl': '5'}]}
>>> from pprint import pprint
>>> pprint(_)
{'persuaded ': [{'teacher': '6'}, {'group': '5'}, {'man': '5'}, {'girl': '5'}],
'removed ': [{'apple': '5'}, {'makeup': '4'}, {'trash': '4'}, {'stain': '4'}]}
我真的很惊讶你不希望每个值都有一个字典:
dic2 = {key: {k: v for sublist in value for k, v in sublist} for key, value in dic1.items()}
产生:
>>> {key: {k: v for sublist in value for k, v in sublist} for key, value in dic1.items()}
{'removed ': {'stain': '4', 'trash': '4', 'apple': '5', 'makeup': '4'}, 'persuaded ': {'group': '5', 'teacher': '6', 'man': '5', 'girl': '5'}}
>>> pprint(_)
{'persuaded ': {'girl': '5', 'group': '5', 'man': '5', 'teacher': '6'},
'removed ': {'apple': '5', 'makeup': '4', 'stain': '4', 'trash': '4'}}
答案 1 :(得分:2)
如果你摆脱了不必要的列表包装,即
dic1 = {'persuaded ': [('teacher', '6'), ('group', '5'), ('man', '5'), ('girl', '5')], 'removed ': [('apple', '5'), ('makeup', '4'), ('trash', '4'), ('stain', '4')]}
你可以很简单地做到这一点:
dic2 = dict((k1, dict(v1)) for k1, v1 in dic1.items())
这给出了
{'persuaded ': {'girl': '5', 'man': '5', 'group': '5', 'teacher': '6'}, 'removed ': {'apple': '5', 'makeup': '4', 'stain': '4', 'trash': '4'}}
这似乎比单项词典列表更有用。
(如果你无法摆脱额外的列表级别,只需使用dict(v1[0])
。)
答案 2 :(得分:0)
dict((k, v) for k,v in c1.items())