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

Python 比较两个列表中两个字典的键并减去它们各自的值,python,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)) 我可以通过遍历两个列表,然后遍历列表中的字典并比较它们的键来获得结果。如果键匹配,则减去值并将结果存储到变量中 任何人都可以建议是否有任何预定义函数可以在一个或两个语句中

我有两份清单:

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))
我可以通过遍历两个列表,然后遍历列表中的字典并比较它们的键来获得结果。如果键匹配,则减去值并将结果存储到变量中


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

一个选项是使用
集合。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)}
演示


给你…使用列表理解

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

这是您想要的输出吗???

如果没有匹配项,您打算做什么?为什么您的字典只有一个键?看起来
a
b
应该是字典,而不是字典列表。除了“为什么你有一个单键字典列表”和“不匹配的情况如何”之外,我必须补充一点-你是否确定第一个列表(
a
在示例中)将始终是minuted,而
b
将始终是减数?是的,前面很少有代码会取绝对值,因此不必担心-ve符号。注意,这个答案大致适用于O(NxM),其中N,M是列表的大小,而从每个列表构造一个dict,并对结果进行大约O(N+M)秒的评估,不相关,对于b中未在a中表示的键,您将不会得到结果。然而,OP仍然没有澄清这一点和其他边缘案例。
[{'aaa': 8}, {'bbb': 15}]