减去两个“词典列表”

时间:2013-01-28 12:17:59

标签: dictionary python-2.7 unique union intersect

我应该如何以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}

1 个答案:

答案 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}]