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

Python按相同字段值合并两个字典列表的实现问题

问题原因

你使用zip(a,b)的逻辑是按两个列表的索引位置一一配对元素,而你给出的b列表中name字段的排列顺序和a列表不一致,因此只有位置刚好对应的条目能匹配成功,其余都会匹配失败。

注意:你提供的b列表存在语法错误,{'name': 'chris', 'exam 2': 'C#'}这一行末尾缺少逗号,运行前需先补全。

解决方案

方法1:字典映射法(推荐,时间复杂度O(n+m),性能最优)

先将其中一个列表转换为以name为键的字典,实现O(1)效率的查找匹配,再遍历另一个列表完成合并:

# 把b列表转换为 name: 对应字典 的映射结构
b_map = {item['name']: item for item in b}

c = []
for item_a in a:
    name = item_a['name']
    # 合并a当前条目和b中匹配的条目
    merged_item = {**item_a, **b_map.get(name, {})}
    c.append(merged_item)

如果需要同时保留仅存在于b列表中的name条目,可以在上述代码执行完成后,再遍历b列表把没有出现在a中的条目补入c即可。

方法2:pandas合并(适合复杂多表合并场景)

如果你的项目已经引入pandas依赖,可以直接用merge方法实现多字段合并,代码更简洁:

import pandas as pd

df_a = pd.DataFrame(a)
df_b = pd.DataFrame(b)
# 按name字段合并,how参数可选inner/outer/left/right匹配规则
c = pd.merge(df_a, df_b, on='name', how='outer').to_dict('records')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 06:24:06