有没有更多的pythonic / compact方法来创建此字典?

时间:2019-09-01 21:19:52

标签: python list dictionary

我有一个字典字典,看起来像这样:

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方式可以做到这一点吗?也许使用字典理解?

2 个答案:

答案 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'}}