获取python中两个字典之间的差异(以值为单位)

时间:2017-04-12 14:08:34

标签: python dictionary comparison difference

假设您有两个词典,AB,其键可以相同但值(整数)将不同。如何比较2个词典,以便在密钥匹配时获得差异(例如,x是来自密钥"A"的值,而y是来自密钥{{1}的值因此,结果应该是2个词典之间的结果(最好是作为新词典)。

理想情况下,您还可以比较增益百分比(两个字典之间的百分比值在特定时间的数字快照之间的百分比变化)。

5 个答案:

答案 0 :(得分:7)

鉴于两个字典AB可能/可能没有相同的键,您可以这样做:

A = {'a':5, 't':4, 'd':2}
B = {'s':11, 'a':4, 'd': 0}

C = {x: A[x] - B[x] for x in A if x in B}

仅减去两个词典中相同的键。

答案 1 :(得分:3)

您可以使用dict理解来循环键,然后从每个原始dict中减去相应的值。

>>> a = {'a': 5, 'b': 3, 'c': 12}
>>> b = {'a': 1, 'b': 7, 'c': 19}
>>> {k: b[k] - a[k] for k in a}
{'a': -4, 'b': 4, 'c': 7}

这假设dict具有完全相同的密钥。否则,如果一个dict中有键而不是另一个(可能是某个默认值?),则必须考虑您期望的行为。

否则,如果您只想评估共享密钥,可以使用密钥的集合交集

>>> {k: b[k] - a[k] for k in a.keys() & b.keys()}
{'a': -4, 'b': 4, 'c': 7}

答案 2 :(得分:2)

def difference_dict(Dict_A, Dict_B):
    output_dict = {}
    for key in Dict_A.keys():
        if key in Dict_B.keys():
            output_dict[key] = abs(Dict_A[key] - Dict_B[key])
    return output_dict

>>> Dict_A = {'a': 4, 'b': 3, 'c':7}
>>> Dict_B = {'a': 3, 'c': 23, 'd': 2}
>>> Diff = difference_dict(Dict_A, Dict_B)
>>> Diff
{'a': 1, 'c': 16}

如果你想把这一切都安排在一条线上,那就是......

def difference_dict(Dict_A, Dict_B):
    output_dict = {key: abs(Dict_A[key] - Dict_B[key]) for key in Dict_A.keys() if key in Dict_B.keys()}
    return output_dict

答案 3 :(得分:0)

如果您希望将类似键的区别转换为新词典,您可以执行以下操作:

By(xpath("//input[@ng-model='newInsight.id']))

...我们可以放入一行

new_dict={}
for key in A:
    if key in B:
        new_dict[key] = A[key] - B[key]

答案 4 :(得分:0)

这里是这个案例的python包:

https://dictdiffer.readthedocs.io/en/latest/

from dictdiffer import diff
print(list(diff(a, b)))

会成功。