首页 > 解决方案 > 有没有更 Pythonic/compact 的方式来创建这个字典?

问题描述

我有一个字典列表,如下所示:

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

但是有没有更蟒蛇/紧凑的方式来做到这一点?也许使用字典理解?

标签: pythonlistdictionary

解决方案


是的,只需将循环重写为 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'}}

推荐阅读