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

如何高效合并两个键名不同的字典列表?

高效合并两个关联列表的方法

原列表数据:

lst1 = [{"name": "Hanna", "age":3},
        {"name": "Kris", "age": 18},
        {"name":"Dom", "age": 15},
        {"name":"Tom", "age": 5}]

lst2 = [{"username": "Kris", "Town": "Big City"},
        {"username":"Dom", "Town": "NYC"}]

需求是将lst2中与lst1name匹配的username对应的Town字段,合并到lst1的对应元素中,得到目标列表。

核心思路:构建映射字典降低查找复杂度

嵌套遍历的时间复杂度为O(n*m)(n、m分别为两个列表的长度),效率极低。最高效的方式是先将lst2转换为以username为键的映射字典,把查找操作的复杂度降到O(1),再遍历lst1完成合并,整体时间复杂度为O(n+m)。

实现代码

  1. 构建快速查找的映射字典
# 生成:username -> 除username外的其他键值对的映射
user_extra_map = {item['username']: {k: v for k, v in item.items() if k != 'username'} for item in lst2}
  1. 遍历lst1完成合并(不修改原列表)
merged_list = []
for item in lst1:
    # 复制原元素,避免污染原始数据
    new_item = item.copy()
    # 若当前name有对应额外信息,直接合并
    new_item.update(user_extra_map.get(item['name'], {}))
    merged_list.append(new_item)

如果使用Python 3.9+,可以用字典合并运算符|简化为列表推导式:

merged_list = [item.copy() | user_extra_map.get(item['name'], {}) for item in lst1]

合并结果

[
    {"name": "Hanna", "age":3},
    {"name": "Kris", "age": 18, "Town": "Big City"},
    {"name":"Dom", "age": 15, "Town": "NYC"},
    {"name":"Tom", "age": 5}
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:50:37