我有两个词典列表
list1 = [ {..}, {..}, ..]
list2 = [ {..}, {..}, ..]
Run Code Online (Sandbox Code Playgroud)
我想删除list2中list1中的字典.我有一个类似的问题,我有一个列表而不是字典列表,这里解决了
如果我使用相同的代码,
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中删除字典?
你不能dict在sets中使用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)