我有两个词典列表。每个列表中的每个字典都有一个id字段。我希望将列表1中的词典与列表2中的词典合并,只要它们共享一个共同的ID'
L1 = [{'id':'123','field1':'abc','field2':'def','field3':'ghi'},{'id':'456','field1':'jkl','field2':'mno','field3':'pqr'},{'id':'789','field1':'stu','field2':'vwx','field3':'yz'}]
L2 = [{'field4':'aaa','field5':'bbb','field6':'ccc','field7':'ddd','id':'101'},{'field4':'eee','field5':'fff','field6':'ggg','field7':'hhh','id':'789'},{'field4':'iii','field5':'jjj','field6':'kkk','field7':'lll','id':'456'},{'field4':'mmm','field5':'nnn','field6':'ooo','field7':'ppp','id':'123'}]
DesiredList = [{'id':'123','field1':'abc','field2':'def','field3':'ghi','field4':'mmm','field5':'nnn','field6':'ooo','field7':'ppp'},{'id':'456','field1':'jkl','field2':'mno','field3':'pqr','field4':'iii','field5':'jjj','field6':'kkk','field7':'lll'},{'id':'789','field1':'stu','field2':'vwx','field3':'yz','field4':'eee','field5':'fff','field6':'ggg','field7':'hhh'},{'field4':'aaa','field5':'bbb','field6':'ccc','field7':'ddd','id':'101'}]
我已经完成了
DesiredList = []
for Dict2 in L2:
for Dict1 in L1:
if Dict1['id'] == Dict2['id']:
Dict2.update(Dict1)
DesiredList.append(Dict2)
这导致
>>>DesiredList
DesiredList = [{'id': '101', 'field6': 'ccc', 'field7': 'ddd', 'field4': 'aaa', 'field5': 'bbb'}, {'field2': 'vwx', 'field3': 'yz', 'field1': 'stu', 'field6': 'ggg', 'field7': 'hhh', 'field4': 'eee', 'field5': 'fff', 'id': '789'}, {'field2': 'mno', 'field3': 'pqr', 'field1': 'jkl', 'field6': 'kkk', 'field7': 'lll', 'field4': 'iii', 'field5': 'jjj', 'id': '456'}, {'field2': 'def', 'field3': 'ghi', 'field1': 'abc', 'field6': 'ooo', 'field7': 'ppp', 'field4': 'mmm', 'field5': 'nnn', 'id': '123'}]
必须有更好的方法来做到更快更有效。
答案 0 :(得分:1)
如果您正在寻找一种有效的方式,您可以这样做
from itertools import chain
from collections import defaultdict
result = defaultdict(dict)
for c_dict in chain(L1, L2):
result[c_dict["id"]].update(c_dict)
print result.values()
<强>输出强>
[{'field1': 'abc',
'field2': 'def',
'field3': 'ghi',
'field4': 'mmm',
'field5': 'nnn',
'field6': 'ooo',
'field7': 'ppp',
'id': '123'},
{'field1': 'stu',
'field2': 'vwx',
'field3': 'yz',
'field4': 'eee',
'field5': 'fff',
'field6': 'ggg',
'field7': 'hhh',
'id': '789'},
{'field1': 'jkl',
'field2': 'mno',
'field3': 'pqr',
'field4': 'iii',
'field5': 'jjj',
'field6': 'kkk',
'field7': 'lll',
'id': '456'},
{'field4': 'aaa',
'field5': 'bbb',
'field6': 'ccc',
'field7': 'ddd',
'id': '101'}]