我有两个词典列表
list1 = [ {..}, {..}, ..]
list2 = [ {..}, {..}, ..]
我想删除list2中list1中的字典。我有一个类似的问题,我有一个列表而不是字典列表,它在这里解决
python function slowing down for no apparent reason
如果我使用相同的代码,
def removeDups(list1, list2):
list2_set = set([tuple(x) for x in list2])
diff = [x for x in list1 if tuple(x) not in list2_set]
return diff
自从像
这样的字典以来,我得不到正确的结果{key1:'a', key2:'b'} and
{key2:'b', key1:'a'}
实际上被认为是不同的。如何更改代码或我该怎么做才能从列表2中的list1中删除字典?
答案 0 :(得分:5)
您无法在dict
中使用set
,因为它们是可变的,并且没有稳定的身份。你可以通过从他们的项目中tuple
来解决这个问题。请注意,简单地将dict
包裹在tuple
中并不会解决这样一个事实:即使它们包含相同的项目,不同的dict
仍然会显示为不同的对象。
要将两个“等效”dict
转换为相同的对象,请取出所有项目,对项目进行排序,然后将其填入tuple
:tuple(sorted(map.items()))
。如果这些tuple
包含相同的项目,则无论原始dict
的顺序如何,这些def removeDups(list1, list2):
set1 = set(tuple(sorted(x.items())) for x in list1)
set2 = set(tuple(sorted(x.items())) for x in list2)
return set1 - set2
将正确地相互比较。
{{1}}