在Python中合并两个没有ID的字典列表

在Python中合并两个没有ID的字典列表,python,list,dictionary,merge,Python,List,Dictionary,Merge,我有两张这样的单子: list1 =[{doc:1,pos_ini:5,pos_fin:10},{doc:1,pos_ini:7,pos_fin:12},{doc:2,pos_ini:5,pos_fin:10},**{doc:7,pos_ini:5,pos_fin:10}**] list2 = [{doc:1,pos_ini:5,pos_fin:10},**{doc:1,pos_ini:6,pos_fin:7}**,{doc:1,pos_ini:7,pos_fin:12},{doc:2,pos

我有两张这样的单子:

list1 =[{doc:1,pos_ini:5,pos_fin:10},{doc:1,pos_ini:7,pos_fin:12},{doc:2,pos_ini:5,pos_fin:10},**{doc:7,pos_ini:5,pos_fin:10}**]

list2 =
[{doc:1,pos_ini:5,pos_fin:10},**{doc:1,pos_ini:6,pos_fin:7}**,{doc:1,pos_ini:7,pos_fin:12},{doc:2,pos_ini:5,pos_fin:10},**{doc:2,pos_ini:25,pos_fin:30}**]
list2
有两个
list1
没有的元素,
list1
有一个
list2
没有的元素

我需要一个包含所有合并元素的
列表\u结果

list_result =[{doc:1,pos_ini:5,pos_fin:10},**{doc:1,pos_ini:6,pos_fin:7}**,{doc:1,pos_ini:7,pos_fin:12},{doc:2,pos_ini:5,pos_fin:10},
**{doc:2,pos_ini:25,pos_fin:30}**,**{doc:7,pos_ini:5,pos_fin:10}**]

在Python中实现这一点的最佳方法是什么?谢谢

您可以创建这些值的集合,而不是需要转换为元组之类的可哈希对象的字典:

unique_list = set(tuple(dictionary.items())) for dictionary in list1 + list2)
然后可以再次转换回字典和列表格式:

l = []
for item in unique_list:
    l.append(dict(item))

类似于上面的内容应该可以使用。

在Python中,内置的
集合非常适合于此。问题是集合需要可散列的
元素,因此必须将dict转换为一组元组:

[dict(items) for items in set(tuple(sorted(d.items())) for d in (list1 + list2))]
您可以使用将每个字典
items()
散列到字典中,然后只需获取分配的值:

list({frozenset(x.items()): x for x in list1 + list2}.values())
或应用于集合理解:

list(map(dict, {frozenset(x.items()) for x in list1 + list2}))
[dict(d) for d in {frozenset(x.items()) for x in list1 + list2}]
甚至只使用列表理解:

list(map(dict, {frozenset(x.items()) for x in list1 + list2}))
[dict(d) for d in {frozenset(x.items()) for x in list1 + list2}]
这将产生一个无序的结果:

注意:如果需要订购,您可以在此处使用:

from collections import OrderedDict

list(OrderedDict((frozenset(x.items()), x) for x in list1 + list2).values())
它给出了这个有序的结果:


在3.6.1中:
TypeError:unhable类型:“dict\u items”