python - PYTHON:我如何以最 Pythonic 的方式将两个字典合并到一个列表中
问题描述
我有一个清单
result = [
{
"name": "James",
"label":"Student",
"class": 18
},
{
"name": "Jacob",
"label":"Professor",
"class": 18
},
{
"name": "Jeff",
"label":"Student",
"class": 19
}
]
我想合并两个同一个类的字典
我努力了:
res = [{item['label']:item['name'],'class':item['class']} for item in result]
print(res)
>>[{'Student': 'James', 'class': 18}, {'Professor': 'Jacob', 'class': 18}, {'Student': 'Jeff', 'class': 19}]
所需输出的样本:
result = [
{
"Student": "James",
"Professor": "Jacob",
"class": 18
},
{
"Student": "Jeff",
"class": 19
}
]
有人可以帮我解决这个问题吗?先感谢您
解决方案
定义一个名为的函数,merge
并创建一个字典merged
来跟踪访问过的类,然后每当出现具有相同类的记录时,我们只需使用以下键值对更新该类的字典label-name
:
def merge(dicts):
merged = {}
for d in dicts:
key = d['class']
if key in merged:
merged[key][d['label']] = d['name']
else:
merged[key] = {'class': d['class'], d['label']: d['name']}
return list(merged.values())
结果:
# print(merge(result))
[{'Student': 'James', 'class': 18, 'Professor': 'Jacob'}, {'Student': 'Jeff', 'class': 19}]
推荐阅读
- php - 尝试访问多维数组中的元素时 PHP 获取“未定义的偏移量”
- python - 在循环内按关键字过滤网页文章
- json - 如何键入断言动态反射生成的结构接口
- google-bigquery - 循环完成后在每个循环和联合中创建临时表
- javascript - Laravel 6 应用程序中的非数值错误
- sql - 由 SQL 作业执行时 SSIS 包失败
- javascript - React - 在其自己的声明中获取组件的属性以在另一个属性中使用其值?
- asp.net - MVC/Core 应用程序和 Web 窗体应用程序之间的无缝登录
- kubernetes - Kubernetes 动态设置服务注解值
- javascript - Javascript调用方法没有相同的上下文