python-3.x - 如何更新两个嵌套列表中的字典?
问题描述
我在这里有 2 个嵌套列表:
l1 = [{'v1':'abc', 'v2':20}, {'v1':'bcd', 'v2':30}, {'v1':'egf', 'v2':15}]
l2 = [{'v1':'abc', 'v3':25}, {'v1':'bcd', 'v3':10}]
我需要根据列表中两个字典的匹配来更新l1
附加键的字典,最终结果为:v3
v1
[{'v1':'abc', 'v2':20,'v3':25}, {'v1':'bcd', 'v2':30, 'v3':10}, {'v1':'egf', 'v2':15}]
您可以通过使用嵌套的 for 循环轻松地做到这一点 -
for i in d1:
for j in d2:
if d2[j]['v1'] == d1[i]['v1']:
d1[i]['v3'] = d2[j]['v3']
break
有没有更多的pythonic方法来解决这个问题?喜欢使用枚举并避免嵌套 for 循环?
解决方案
将列表命名为d1
和d2
会使它们有点混乱。因此,我冒昧地将它们重命名为l1
, l2
,并将结果列表重命名为l3
. 您可以将列表理解与字典更新语法一起使用,如下所示:
l1 = [{"v1": "abc", "v2": 20}, {"v1": "bcd", "v2": 30}]
l2 = [{"v1": "abc", "v3": 25}, {"v1": "bcd", "v3": 10}]
[{"v1": "abc", "v2": 20, "v3": 25}, {"v1": "bcd", "v2": 30, "v3": 10}]
# List comp with ** syntax to update the dicts of the first list
l3 = [{**d1, **d2} for d1, d2 in zip(l1, l2)]
print(l3)
这将打印:
[{'v1': 'abc', 'v2': 20, 'v3': 25}, {'v1': 'bcd', 'v2': 30, 'v3': 10}]
注意正如@Asocia所指出的,这个解决方案有一个警告。它假定列表按照您在问题陈述中提供的方式进行排序。
推荐阅读
- vb6 - VB6 错误:对象“IAdodc”的方法“刷新”失败
- python - python语言中的圣诞树
- c - strtok_r() 对 strtok() 做了哪些改变?结果仍然看起来一样,它改变了原始字符串
- css - Woocommerce 样式数量输入(OceanWP)
- python - 获取 ModuleNotFoundError:Python 中没有名为“PythonMagick”的模块
- python - 使用 numpy 进行整数编程
- python - Odoo python模块:根据月份创建多条记录
- python - 使用 asyncio.wait,我无法判断我的 Event.wait 任务是完成还是待处理?
- python - 如何在 Django 中注释相关模型中的值
- spring-boot - OAuth2 机器与 Spring WebClient 的机器