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

基于非唯一键合并两个非相同字典列表的技术问询

合并两个字典列表(基于非唯一键匹配)

你需要将两个字典列表d1和d2按照d1['Name']与d2['column_name']的匹配关系进行合并,保留所有条目——匹配上的合并键值对,未匹配的保留原内容。你之前尝试的Counter方法并不适用这个场景,因为Counter的核心作用是统计计数,和字典合并的需求不匹配,而且你的代码里还引用了不存在的val_count键,这也会导致报错。

原始数据

首先明确你的输入数据:

d1 = [{'del': True, 'Name': 'tbl_n','node':'3'},
      {'del': True, 'Name': 'src_n','node':'5'}]
d2 = [{'items':'23', 'column_name':'tbl_n','created':'3.34','count':0,'valid':'yes'},
      {'items':'43', 'column_name':'src_n','created':'3.34','count':40,'valid':'yes'},
      {'items':'22', 'column_name':'mod_n','created':'3.34','count':13,'valid':'no'}]

正确实现方法

我们可以先把d2转换成以column_name为键的映射字典,这样能快速查找匹配项,然后分别处理匹配条目和未匹配条目:

# 将d2转换为以column_name为键的字典,提升匹配效率
d2_mapping = {item['column_name']: item for item in d2}

merged_list = []

# 处理d1中能匹配到d2的条目
for d1_item in d1:
    current_name = d1_item['Name']
    if current_name in d2_mapping:
        # 合并两个字典,这里用**解包的方式合并,也可以用Python3.9+的 | 运算符
        combined = {**d1_item, **d2_mapping[current_name]}
        # 移除重复的column_name键,统一使用Name
        combined.pop('column_name', None)
        merged_list.append(combined)
        # 从映射中删除已处理的条目,避免后续重复添加
        del d2_mapping[current_name]

# 处理d2中未匹配到d1的剩余条目
for remaining_item in d2_mapping.values():
    merged_list.append(remaining_item)

# 输出结果
print(merged_list)

输出结果

运行上述代码后,得到的结果与你期望的d3一致(修正了你期望输出中的语法小错误):

[
 {'del': True, 'Name': 'tbl_n', 'node': '3', 'items': '23', 'created': '3.34', 'count': 0, 'valid': 'yes'},
 {'del': True, 'Name': 'src_n', 'node': '5', 'items': '43', 'created': '3.34', 'count': 40, 'valid': 'yes'},
 {'items': '22', 'column_name': 'mod_n', 'created': '3.34', 'count': 13, 'valid': 'no'}
]

逻辑说明

  • 构建映射字典:把d2转成column_name到对应条目的映射,这样查找匹配项的时间复杂度从O(n)降到O(1),处理大量数据时效率更高。
  • 合并匹配条目:遍历d1的每个条目,找到对应的d2条目后合并,同时移除重复的column_name键,保证结果格式统一。
  • 添加未匹配条目:把d2中没有匹配到d1的条目直接添加到结果列表,确保没有遗漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:39:27