python - 有没有更 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
但是有没有更蟒蛇/紧凑的方式来做到这一点?也许使用字典理解?
解决方案
是的,只需将循环重写为 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'}}
推荐阅读
- azure - Azure 自动化 - 如何通过公共 webhook 运行脚本?
- javascript - Angularjs typeahead不显示第二个输入焦点的选项
- angular - 在 Angular 5 中包含节假日
- c++ - 在 C++11 中将指针转换为多维 C 样式数组
- c++ - 从一组有限的类中静态转换为一个类
- java - java.net.NetworkInterface.getNetworkInterfaces() not listing all interfaces for OS X
- c# - c#如何在Word中获取标准字体样式对象
- angular - Unhandled Promise rejection: Failed to execute 'transaction' on 'IDBDatabase' angularfire
- python - 将 python 2 中的脚本迁移到 python 3.x
- python - 具有不同输出计算的 Scikit-learn