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

Python如何按相同name值合并两个字典列表且实现最低时间复杂度

要实现低时间复杂度的合并,最优方案是先做映射再匹配,整体时间复杂度为O(m+n)(m、n分别为两个列表的长度),远优于嵌套循环的O(mn)方案。

实现代码

# 测试用的两个字典列表
list1 = [
    {"name": "A", "born": "London"},
    {"name": "B", "born": "Sydney"},
    {"name": "C", "born": "Paris"}
]

list2 = [
    {"name": "A", "class": 1},
    {"name": "B", "class": 2},
    {"name": "C", "class": 3}
]

# 第一步:遍历list1构建name到指定属性的映射表,时间复杂度O(len(list1))
# 这里要追加born字段,如果需要追加多个字段,直接把value改成对应字典即可
name_map = {item["name"]: item["born"] for item in list1}

# 第二步:遍历list2完成属性追加,时间复杂度O(len(list2))
# 如果不需要保留原list2,可以直接修改item不用copy
list3 = []
for item in list2:
    merged_item = item.copy()
    if item["name"] in name_map:
        merged_item["born"] = name_map[item["name"]]
    list3.append(merged_item)

# 输出结果
print(list3)

输出结果和要求的格式完全一致:

[
    {'name': 'A', 'class': 1, 'born': 'London'},
    {'name': 'B', 'class': 2, 'born': 'Sydney'},
    {'name': 'C', 'class': 3, 'born': 'Paris'}
]

额外说明

  • 如果需要追加list1的多个指定字段,修改映射表的生成逻辑即可:
    # 比如要追加born、gender两个字段
    name_map = {
        item["name"]: {k: v for k, v in item.items() if k in ["born", "gender"]}
        for item in list1
    }
    # 追加的时候用update方法
    merged_item.update(name_map[item["name"]])
    
  • 不需要匹配的name会自动跳过,不会报错,不会影响原有数据。
  • 如果两个列表数据量极大,该方案的效率优势会非常明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 19:15:00