我有两份名单:
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))
通过迭代两个列表,然后遍历列表中的字典并比较它们的键,我就能够实现这个结果。如果键匹配,则减去值并将结果存储到变量中。
是否有人建议是否有任何预定义函数来实现一个或两个语句的结果,而不是编写许多嵌套循环。
发布于 2013-12-23 11:22:00
在这里,您使用列表理解的go...by。
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}]
这是你想要的输出吗??
发布于 2013-12-23 10:54:50
一种选择是使用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}
https://stackoverflow.com/questions/20741863
复制相似问题