删除python中列表中的重复词典

时间:2009-11-12 19:05:52

标签: python

我有两个词典列表

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中删除字典?

1 个答案:

答案 0 :(得分:5)

您无法在dict中使用set,因为它们是可变的,并且没有稳定的身份。你可以通过从他们的项目中tuple来解决这个问题。请注意,简单地将dict包裹在tuple中并不会解决这样一个事实:即使它们包含相同的项目,不同的dict仍然会显示为不同的对象。

要将两个“等效”dict转换为相同的对象,请取出所有项目,对项目进行排序,然后将其填入tupletuple(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}}