我有一个字典字典,看起来像这样:
original_dict = {
1: [{'name': 'Sam'}, {'name': 'Mahmoud'}, {'name': 'Xiao'}],
2: [{'name': 'Olufemi'}, {'name': 'Kim'}, {'name': 'Rafael'}]
}
我知道该词典中列表中的名称都是唯一的。 IE:同一个名称不会在此结构中出现多次。我想编译一个所有子词典的字典,并按其名称作为关键字。我希望结果看起来像这样:
result_dict = {
'Sam': {'name': 'Sam'},
'Mahmoud': {'name': 'Mahmoud'},
'Xiao': {'name': 'Xiao'},
'Olufemi': {'name': 'Olufemi'},
'Kim': {'name': 'Kim'},
'Rafael': {'name': 'Rafael'}
}
到目前为止,我的解决方案如下:
result_dict = {}
for list_of_dicts in original_dict.values:
for curr_dict in list_of_dicts:
result_dict[curr_dict['name']] = curr_dict
但是还有更多的pythonic / compact方式可以做到这一点吗?也许使用字典理解?
答案 0 :(得分:1)
您可以使用字典理解。
result = {name['name']: name for k, v in original.items() for name in v}
内部的for循环将遍历所有键值对,外部的将遍历每个值中的每个名称。
答案 1 :(得分:1)
是的,只需将循环重写为dict理解即可:
original = {
1: [{'name': 'Sam'}, {'name': 'Mahmoud'}, {'name': 'Xiao'}],
2: [{'name': 'Olufemi'}, {'name': 'Kim'}, {'name': 'Rafael'}]
}
result = {d['name']: d for l in original.values() for d in l}
from pprint import pprint
pprint(result)
输出:
{'Kim': {'name': 'Kim'},
'Mahmoud': {'name': 'Mahmoud'},
'Olufemi': {'name': 'Olufemi'},
'Rafael': {'name': 'Rafael'},
'Sam': {'name': 'Sam'},
'Xiao': {'name': 'Xiao'}}