合并2个包含匹配ID的对象的列表

Maj*_*ajs 3 python

我有2个包含如下对象的列表:

清单1:

{'name': 'Nick', 'id': '123456'}
Run Code Online (Sandbox Code Playgroud)

清单2:

{'address': 'London', 'id': '123456'}
Run Code Online (Sandbox Code Playgroud)

现在,我要创建第三个列表,其中包含如下所示的对象:

{'name': 'Nick', 'address': 'London', 'id': '123456'}
Run Code Online (Sandbox Code Playgroud)

即,我想找到匹配的ID,并合并这些对象。

Ada*_*Er8 5

您可以使用groupby获取所有匹配的字典,然后使用统一它们ChainMap,如下所示:

from itertools import groupby
from operator import itemgetter
from collections import ChainMap

list1 = [{'name': 'Nick', 'id': '123456'}, {'name': 'Donald', 'id': '999'}]
list2 = [{'address': 'London', 'id': '123456'}, {'address': 'NYC', 'id': '999'}]

grouped_subdicts = groupby(sorted(list1 + list2, key=itemgetter("id")), itemgetter("id"))

result = [dict(ChainMap(*g)) for k, g in grouped_subdicts]

print(result)
Run Code Online (Sandbox Code Playgroud)

输出:

[{'id': '123456', 'address': 'London', 'name': 'Nick'},
{'id': '999', 'address': 'NYC', 'name': 'Donald'}]
Run Code Online (Sandbox Code Playgroud)