如果列表中的 id 与分隔符匹配,Python 合并 2 个 DICT 对象

问题描述 投票:0回答:1

在 Python 中我有这 2 个 dicts 对象:

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'}]

我想将这两个字典合并到一个新字典中,如果在 dict2 的

'company_name'
中找到 dict1 的
id_contact
,则添加
id_company
。 如果有多个匹配项我想使用“;”作为
'company_name'
中的分隔符。

预期结果是:

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

感谢您的帮助。

python dictionary merge match partial
1个回答
0
投票

初步说明:

dict1
dict1
列表(字典),而不是字典。

您需要几个步骤,首先循环

dict2
以聚合每个 ID 的公司名称,然后将其展平为字符串。最后,循环
dict1
并添加缺少的键:

companies = {}
for d in dict2:
    for i in d.get('id_company', '').strip(';').split(';'):
        companies.setdefault(i, []).append(d['company_name'])
companies = {i: ';'.join(v) for i, v in companies.items()}
# {'1': 'Nike;Adidas', '3': 'Nike', '4': 'Nike', '11': 'Nike',
#  '2': 'Adidas', '9': 'Adidas'}

for d in dict1:
    d['company_name'] = companies.get(d['id_contact'])

print(dict1)

输出:

[{'id_contact': '1', 'name': 'Rick', 'company_name': 'Nike;Adidas'},
 {'id_contact': '9', 'name': 'John', 'company_name': 'Adidas'}]
© www.soinside.com 2019 - 2024. All rights reserved.