Python中列表字典的差异如何查找?

4

我在Python中有两个列表;

listA = [{'b': '3'}, {'b': '4'}]
listB = [{'a': '3'}, {'b': '3'}]

我试图将其转换为集合,但是显示了不可哈希类型:'dict'

我尝试进行的操作是

list[(set(listA)).difference(set(listB))]

那么,为了实现同样的功能,我可以对我的列表做些什么呢?谢谢。

第一个列表中为什么有两个b键?预期输出是什么? - OneCricketeer
要在集合中使用或作为字典的键,类型必须是不可变的。 - syntaxError
2
可能是重复的问题:如何找到两个字典列表之间的差异? - voidpro
listA:一系列场景的关键问题 listB:一系列场景没有问题 b,a:用户 3,4:设备ID - Jos
3个回答

7

使用简单的列表推导式来完成。

>>> [i for i in listA if i not in listB]
[{'b': '4'}]

1
我们可以使用 dict.items() 来获取元组,这些元组可以转换为 set 类型。
setA = set(chain(*[e.items() for e in listA]))
setB = set(chain(*[e.items() for e in listB]))

print setA.symmetric_difference(setB)

输出为:
set([('a', '3'), ('b', '4')])

打印 setA 和 setB 的差异。 - Jos
对称差集返回仅在一个集合中的所有元素。 - Jacky1205

0
你可以使用itertools中的ifilterfalse。
list(itertools.ifilterfalse(lambda x: x in listA, listB)) + list(itertools.ifilterfalse(lambda x: x in listB, listA))

输出将会是:

[{'b': '4'}, {'a': '3'}]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接