You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何按name、age字段合并两个存储字典的列表

解决方案

核心思路是使用(name, age)元组作为唯一匹配键,利用Python字典内置的update()方法自动合并键值对,无需手动判断每个字段,灵活性更高:

可直接运行的代码

a = [{'name': 'Helen', 'age': '12', 'total_money':'12000'}, {'name': 'Victor', 'age':'20', 'total_money': '32999'}]
b = [{'name': 'Helen', 'age': '12', 'total_gold':'14'}]

# 用(name, age)作为唯一键存储合并结果
merge_map = {}

# 先处理第一个列表的所有条目
for item in a:
    key = (item['name'], item['age'])
    merge_map[key] = item.copy()  # 拷贝避免修改原列表中的字典

# 再处理第二个列表的所有条目
for item in b:
    key = (item['name'], item['age'])
    if key in merge_map:
        # 匹配到就合并两个字典的所有键值对
        merge_map[key].update(item)
    else:
        # 未匹配到直接新增
        merge_map[key] = item.copy()

# 提取结果为列表
output = list(merge_map.values())
print(output)

运行后输出完全符合预期:

[{'name': 'Helen', 'age': '12', 'total_money': '12000', 'total_gold': '14'}, {'name': 'Victor', 'age': '20', 'total_money': '32999'}]

原有代码问题说明

你原来的实现存在两个明显问题:

  • 硬编码判断total_money、total_gold字段,扩展性极差,后续新增其他字段就要改代码
  • 逻辑判断if data[key]["total_money"] in data[key]完全错误,你是在判断total_money的值是不是字典的键,和需求完全不符

更简洁的Python 3.9+写法

如果你的Python版本 >=3.9,可以用字典合并运算符简化代码:

merge_map = {(item['name'], item['age']): item for item in a}
for item in b:
    key = (item['name'], item['age'])
    merge_map[key] = merge_map.get(key, {}) | item
output = list(merge_map.values())

内容的提问来源于stack exchange,提问作者daniel8x

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 05:27:01