在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”