比较两个列表中存在的两个词典的键并减去它们各自的值

时间:2013-12-23 10:45:25

标签: python

我有两个清单:

a=[{"aaa":10},{"bbb":20}]
b=[{"aaa":2},{"bbb":5}]

我想减去列表中的字典,如果它们的键匹配并将结果存储到变量中,则减去该值。

预期结果

 var_1=8        i.e (aaa(10-2))
 var_2=15       i.e (bbb(20-5))

我能够通过遍历列表,然后遍历列表中的字典并比较它们的键来实现结果。如果键匹配,则减去值并将结果存储到变量

任何人都可以建议是否有任何预定义函数在一个或两个语句中实现结果,而不是编写许多嵌套循环。

2 个答案:

答案 0 :(得分:1)

在这里,您可以使用列表理解。

final_result =  [{key:dic_a[key]- dic_b[key]} for dic_a in a for dic_b in b for key in dic_a if key in dic_b]

结果:

[{'aaa': 8}, {'bbb': 15}]

这是你想要的输出吗?

答案 1 :(得分:0)

一种选择是使用collections.Counter将您的列表转换为计数器,然后按您喜欢的方式减去它们。以下代码将威胁缺失值作为零:

import collections 

def substract_lists(a, b):
    def sum_dicts(*dicts):
        rv = collections.Counter()
        for d in dicts: rv.update(**d)
        return rv
    a2c = sum_dicts(*a)
    b2c = sum_dicts(*b)
    return {k: a2c[k] - b2c[k] for k in set(a2c) | set(b2c)}

演示

>>> substract_lists([{'aaa': 10}, {'ccc': -20}], [{'aaa': 2}, {'bbb': 5}])
{'aaa': 8, 'bbb': -5, 'ccc': -20}