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

如何匹配字典列表数据并去重,合并同code_id的groups

合并相同code_id的字典条目并聚合groups字段

需求说明

现有两个字典列表:

  • codes:存储code_id与groups的关联关系,一个code_id对应多个groups
  • data_master:存储code_id的详细信息,但同一code_id因groups不同存在重复条目

需要实现:每个code_id仅保留一个字典条目,将该code_id对应的所有groups合并为数组赋值给groups字段。

原始数据

codes列表

codes = [{'code_id': '57025', 'groups': '1234'}, 
{'code_id': '57025', 'groups': '4567'}, 
{'code_id': '57025', 'groups': '8910'},
{'code_id': '1', 'groups': '4321'},
{'code_id': '1', 'groups': '9876'}]

data_master当前输出

[{'code_id': '57025', 
'groups': '1234', 
'initials': 'XXXXX', 
'name': 'XXXX',
'city': 'LOS SANTOS',
'postal_code': '02938402-9093',
'uf': 'US',
'address': 'GROOVE STREET', 
'number_1': '',
'number_2': ''},

{'code_id': '57025', 
'groups': '4567', 
'initials': 'XXXXX', 
'name': 'XXXX',
'city': 'LOS SANTOS',
'postal_code': '02938402-9093',
'uf': 'US',
'address': 'GROOVE STREET', 
'number_1': '',
'number_2': ''},

{'code_id': '1', 
'groups': '4321', 
'initials': 'YYYY', 
'name': 'YYYY',
'city': 'GOTHAM',
'postal_code': '930489038-5679',
'uf': 'US',
'address': 'WAYNE TOWER', 
'number_1': '',
'number_2': ''},

{'code_id': '1', 
'groups': '9876', 
'initials': 'YYYY', 
'name': 'YYYY',
'city': 'GOTHAM',
'postal_code': '930489038-5679',
'uf': 'US',
'address': 'WAYNE TOWER', 
'number_1': '',
'number_2': ''}
]

正确实现代码

# 第一步:将codes按code_id分组,构建code_id到groups列表的映射
code_groups_map = {}
for code_item in codes:
    code_id = code_item['code_id']
    if code_id not in code_groups_map:
        code_groups_map[code_id] = []
    code_groups_map[code_id].append(code_item['groups'])

# 第二步:遍历data_master,去重并替换groups字段
result = []
processed_codes = set()

for master_item in data_master:
    current_code = master_item['code_id']
    if current_code not in processed_codes:
        # 复制原条目,避免修改原始数据
        merged_item = master_item.copy()
        # 替换为当前code_id对应的groups列表
        merged_item['groups'] = code_groups_map.get(current_code, [])
        result.append(merged_item)
        processed_codes.add(current_code)

# 输出结果
print(result)

执行结果(符合期望)

[{'code_id': '57025', 
'groups': ['1234','4567','8910'],
'initials': 'XXXXX', 
'name': 'XXXX',
'city': 'LOS SANTOS',
'postal_code': '02938402-9093',
'uf': 'US',
'address': 'GROOVE STREET', 
'number_1': '',
'number_2': ''},

{'code_id': '1', 
'groups': ['4321','9876'],
'initials': 'YYYY', 
'name': 'YYYY',
'city': 'GOTHAM',
'postal_code': '930489038-5679',
'uf': 'US',
'address': 'WAYNE TOWER', 
'number_1': '',
'number_2': ''}]

原代码问题分析

  1. 全局group_list导致groups混叠:原代码中group_list是全局变量,会收集所有条目的groups,导致每个code_id的groups都包含所有数据。
  2. 去重逻辑无效:第二个循环中的(item["groups"] != data["groups"] for item in new_data_master)是生成器表达式,在布尔判断中永远为True,无法实现去重,所有重复条目都会被保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:51:04