我应该如何以pythonic方式减去两个list of dictionaries
?
我想找到第一个listOfDict中唯一的元素。
请参阅下面的示例:
firstDict = [{'A':1 ,'B':1}, {'A':2 ,'B':2}]
secondDict = [{'A':3 ,'B':3}, {'A':2 ,'B':2}]
magicFunction(A, B)
应该返回
[{'A':1 ,'B':1}
和magicFunction(B, A)
应该返回
[{'A':3 ,'B':3}
答案 0 :(得分:1)
您可以使用集合,但遗憾的是,dict
无法添加到集合中。您需要将字典“转换”为可以处理的内容,例如不可变类型,如元组序列。将其与索引相结合以返回引用的dict
:
def magicFunction(a, b):
a = [tuple(sorted(d.items())) for d in a]
b = [tuple(sorted(d.items())) for d in b]
return [dict(kvs) for kvs in set(a).difference(b)]
结果:
>>> firstDict = [{'A':1 ,'B':1}, {'A':2 ,'B':2}]
>>> secondDict = [{'A':3 ,'B':3}, {'A':2 ,'B':2}]
>>> magicFunction(firstDict, secondDict)
[{'A': 1, 'B': 1}]
>>> magicFunction(secondDict, firstDict)
[{'A': 3, 'B': 3}]