繁体   English   中英

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

[英]Compare the keys of two dictionaries present inside two lists and subtracting their respective values

我有两个清单:

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))

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

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

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

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

这是您想要的输出吗?

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

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}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM