使用辅助键对字典值进行求和

时间:2016-11-12 17:12:34

标签: python dictionary

我有一个类似[a] [b] =(c)的字典,例如:

{'cat': {1:1, 2:3, 3:1, 4:1}, 'dog': {1:8, 2:2, 3:4}, 'egg': {5:1, 6:2}, 'frog': {2:1, 4:1, 5:1}, 'nuts': {3:1}, 'idea': {4:1}}

我希望能够做的是通过[b]键搜索并对属于它的相应c求和。所以我得到以下输出:

1:9,2:6,3:6 ......等等。

这是否需要重组字典?

3 个答案:

答案 0 :(得分:2)

您可以使用collections.defaultdict迭代作为词典的字典值并总结每个键的值。然后,您只需访问结果字典,找出每个密钥的总和值,而无需搜索:

from collections import defaultdict

d = {'cat': {1:1, 2:3, 3:1, 4:1}, 'dog': {1:8, 2:2, 3:4}, 'egg': {5:1, 6:2}, 'frog': {2:1, 4:1, 5:1}, 'nuts': {3:1}, 'idea': {4:1}}

result = defaultdict(int)
for i in d.values():
    for j in i:
        result[j] += i[j]

print(result)
# defaultdict(<class 'int'>, {1: 9, 2: 6, 3: 6, 4: 3, 5: 2, 6: 2})
>>> print(result[1])
9

答案 1 :(得分:0)

我假设你有这样的词典:

d = {'cat': {1:1, 2:3, 3:1, 4:1}, 'dog': {1:8, 2:2, 3:4}, 'egg': {5:1, 6:2}, 'frog': {2:1, 4:1, 5:1}, 'nuts': {3:1}, 'idea': {4:1}}}

现在我们必须编写一个函数,它将获取一个参数(一个整数),并在所有内部字典中对此整数的所有值求和。

def calc(b):
    result = 0
    for val in d.values():
        if b in val:
            result += val[b]

答案 2 :(得分:0)

如果你需要的只是总数,那么你可以sum使用以下方法提升所有值:

>>> b = 2
>>> sum(a.get(b, 0) for a in d.values())
6

如果您想要所有b s,那么您使用行为类似于collections.Counter()的{​​{1}}来完成所有繁重的工作:

dict

但如果你真的很挑剔并想要一个>>> from collections import Counter >>> sum((Counter(a) for a in d.values()), Counter()) Counter({1: 9, 2: 6, 3: 6, 4: 3, 5: 2, 6: 2})

dict