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

Python中根据匹配ID合并字典列表 多结果以分号分隔

实现两个Python字典列表的匹配合并

我们需要将两个字典列表按规则合并:当dict1中字典的id_contact值存在于dict2中字典的id_company字段(以分号包裹的字符串)时,为dict1的字典添加company_name字段;若有多个匹配的公司名称,用分号;拼接。

原始数据

dict1 = [{'id_contact': '1', 'name': 'Rick'},{'id_contact': '9', 'name': 'John'}]
dict2 = [{'id_company': ';1;3;4;11;', 'company_name': 'Nike'},{'id_company': ';1;2;9;', 'company_name': 'Adidas'}]

期望结果

dictmerge = [{'id_contact': '1', 'name': 'Rick', 'company_name': 'Nike;Adidas'},{'id_contact': '9', 'name': 'John', 'company_name': 'Adidas'}]

实现方案

方法一:预处理字典提升效率

先把dict2中的数据转换成以联系人ID为键、公司名列表为值的字典,后续匹配时直接查找,避免重复遍历dict2,适合数据量较大的场景:

# 预处理dict2,构建ID到公司名的映射
id_to_companies = {}
for company in dict2:
    # 拆分id_company字段,去除首尾分号后分割
    contact_ids = company['id_company'].strip(';').split(';')
    for cid in contact_ids:
        if cid not in id_to_companies:
            id_to_companies[cid] = []
        id_to_companies[cid].append(company['company_name'])

# 合并字典列表
dictmerge = []
for contact in dict1:
    cid = contact['id_contact']
    # 复制原字典,避免修改原始数据
    merged = contact.copy()
    if cid in id_to_companies:
        merged['company_name'] = ';'.join(id_to_companies[cid])
    dictmerge.append(merged)

print(dictmerge)

方法二:直接遍历匹配(适合小数据量)

如果数据量不大,直接嵌套循环完成匹配,代码更直观简洁:

dictmerge = []
for contact in dict1:
    cid = contact['id_contact']
    merged = contact.copy()
    matched_companies = []
    for company in dict2:
        # 用带前后分号的格式判断,避免误匹配(比如避免id=1匹配到id=11)
        if f';{cid};' in company['id_company']:
            matched_companies.append(company['company_name'])
    if matched_companies:
        merged['company_name'] = ';'.join(matched_companies)
    dictmerge.append(merged)

print(dictmerge)

代码说明

  • 两种方法都使用copy()复制原字典,防止修改原始的dict1数据;
  • 方法一将时间复杂度从O(n*m)优化为O(n+m),数据量越大效率提升越明显;
  • 匹配时使用f';{cid};'的格式判断,避免出现短ID匹配到长ID的误判情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 06:13:27