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

ran*_*ght 1 python

我有两个词典列表

list1 = [ {..}, {..}, ..]
list2 = [ {..}, {..}, ..]
Run Code Online (Sandbox Code Playgroud)

我想删除list2中list1中的字典.我有一个类似的问题,我有一个列表而不是字典列表,这里解决了

python函数因没有明显原因而放慢速度

如果我使用相同的代码,

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
Run Code Online (Sandbox Code Playgroud)

我没有得到正确的结果,因为词典喜欢

{key1:'a', key2:'b'} and 
{key2:'b', key1:'a'}
Run Code Online (Sandbox Code Playgroud)

哪些是相同的实际上被认为是不同的.如何更改代码或我该怎么做才能从列表2中的list1中删除字典?

Joh*_*ica 5

你不能dictsets中使用s,因为它们是可变的并且没有稳定的身份.你可以通过制作tuple他们的物品来解决这个问题.请注意,简单地将a包装dict在a中tuple并不能解决这样的事实:dict即使它们包含相同的项目,distinct s仍将看起来是不同的对象.

要将两个"等价物" dict变成相同的物体,取出所有物品,对物品进行分类,然后将它们装入tuple:tuple(sorted(map.items())).tuple如果它们包含相同的项目,无论原始顺序如何,那些s将正确地相互比较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
Run Code Online (Sandbox Code Playgroud)