Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 合并2个包含OBEJCT和匹配ID的列表_Python - Fatal编程技术网

Python 合并2个包含OBEJCT和匹配ID的列表

Python 合并2个包含OBEJCT和匹配ID的列表,python,Python,我有两个列表,其中包含如下所示的对象: {'name': 'Nick', 'address': 'London', 'id': '123456'} 清单1: {'name': 'Nick', 'id': '123456'} 清单2: {'address': 'London', 'id': '123456'} 现在我想创建第三个列表,其中包含如下所示的对象: {'name': 'Nick', 'address': 'London', 'id': '123456'} i、 e,我想找到匹配的

我有两个列表,其中包含如下所示的对象:

{'name': 'Nick', 'address': 'London', 'id': '123456'}
清单1:

{'name': 'Nick', 'id': '123456'}
清单2:

{'address': 'London', 'id': '123456'}
现在我想创建第三个列表,其中包含如下所示的对象:

{'name': 'Nick', 'address': 'London', 'id': '123456'}
i、 e,我想找到匹配的id,并合并这些对象。

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

{'name': 'Nick', 'address': 'London', 'id': '123456'}
从itertools导入groupby
从运算符导入itemgetter
从集合导入链映射
列表1=[{'name':'Nick','id':'123456'},{'name':'Donald','id':'999'}]
列表2=[{'address':'London','id':'123456'},{'address':'NYC','id':'999'}]
grouped_subdcts=groupby(排序(list1+list2,key=itemgetter(“id”)),itemgetter(“id”))
结果=[k的dict(ChainMap(*g)),g在分组的_子块中]
打印(结果)
输出:

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

同一列表中是否有重复的
id
s?如果需要定义冲突策略(取第一个?取最后一个?抛出错误?),那么
set(列表1中x的x['id'])==set(列表2中x的x['id'])
?@0x5453无重复项:)最多只能有两个相同的id。这些是dict,而不是对象。你来自Javascript,是吗?:)这很好。另外,您可以理解
分组子目录
并将
dict(ChainMap(g))
应用于每个分组,而不是在
分组子目录
上编写
for
循环,并使用
更新
。@KyleParsons真棒!!我讨厌
循环:P谢谢!