首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较两个字典在两个列表中的键,并减去它们各自的值。

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

Stack Overflow用户
提问于 2013-12-23 10:45:24
回答 2查看 156关注 0票数 0

我有两份名单:

代码语言:javascript
运行
复制
a=[{"aaa":10},{"bbb":20}]
b=[{"aaa":2},{"bbb":5}]

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

预期结果

代码语言:javascript
运行
复制
 var_1=8        i.e (aaa(10-2))
 var_2=15       i.e (bbb(20-5))

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

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-23 11:22:00

在这里,您使用列表理解的go...by。

代码语言:javascript
运行
复制
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]

结果:

代码语言:javascript
运行
复制
[{'aaa': 8}, {'bbb': 15}]

这是你想要的输出吗??

票数 1
EN

Stack Overflow用户

发布于 2013-12-23 10:54:50

一种选择是使用collections.Counter将列表转换为计数器,并以您喜欢的方式对它们进行减缩。下面的代码将将丢失的值威胁为零:

代码语言:javascript
运行
复制
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)}

演示

代码语言:javascript
运行
复制
>>> substract_lists([{'aaa': 10}, {'ccc': -20}], [{'aaa': 2}, {'bbb': 5}])
{'aaa': 8, 'bbb': -5, 'ccc': -20}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20741863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档