对嵌套字典中的特定元素求和

时间:2019-01-28 10:31:08

标签: python function dictionary sum

我有3个使用嵌套字典表示的不同书包。它们的键是“ bag1”,“ bag2”和“ bag3”,并且依次包含不同数量的不同颜色的球,每种颜色类别也由字典表示。如何以仅在每个包中添加所有相应颜色的字典结尾?例如,dict1 = {'bag1': { 'red' : 2, 'blue' : 5, 'green' : 7}, 'bag2' : { 'red' : 3, 'blue': 4, 'green': 8}}。现在,我想以另一个dict2 = { 'red' : 5, 'blue': 9, 'green': 15}形式的最终字典结尾。有人可以为我提供执行此操作的功能吗?

4 个答案:

答案 0 :(得分:0)

首先要创建结果字典:

dict2 = {}
for key in dict1['bag1'].keys():
    dict2[key] = 0

然后填写

for bag in dict1.values():
    for key, value in bag.items():
        dict2[key] += value

答案 1 :(得分:0)

您可以从Counter模块使用collections

from collections import Counter
dict1 = {'bag1': {'red': 2, 'blue': 5, 'green': 7}, 'bag2': {'red': 3, 'blue': 4, 'green': 8}}

counter = sum(map(Counter, dict1.values()), Counter())
print dict(counter)

输出

{'blue': 9, 'green': 15, 'red': 5}

答案 2 :(得分:0)

在递归函数log_a下将从JSON中找到键的值。

var a = 'a value';

(function(global) {

    global.log_a = function() {
        console.log(a);
    };

}(window));

var anotherFunction = function() {
    log_a();
};

anotherFunction();

输出:get_value

答案 3 :(得分:0)

使用list comprehensions解决此问题-

a=[ d.items() for d in list(dict1.values())]
my_tuples=[item for sublist in a for item in sublist]
my_set = {x[0] for x in my_tuples}
my_sums = dict([(i,sum(x[1] for x in my_tuples if x[0] == i)) for i in my_set])
print(my_sums)
    {'green': 15, 'red': 5, 'blue': 9}

Screenshot of the output