如何在多维字典中求和?

问题描述 投票:2回答:6

通常,我将使用sum(dict ['A']。values())来对键为“ A”的字典中的所有值求和。但是,在这种情况下,不是我要求和的“主”键的所有值,而是“辅助/子键”具有特定名称的所有值。让我在下面显示一个简化的示例:

dict = {'A':{'val1':3,'val2':5},'B':{'val1':2,'val2':6}}
sum1 = dict['A']['val1']+dict['B']['val1']
sum2 = dict['A']['val2']+dict['B']['val2']

上面的示例很容易,因为它只有2 * 2的尺寸,因此我可以很容易地直接添加值。但是,当字典变大时,此方法不可行。所以我想知道什么是最有效的解决方案。

python dictionary
6个回答
2
投票

要汇总单个子项的值,可以将sum()与生成器表达式一起使用:

>>> d = {'A': {'val1': 3,'val2': 5}, 'B': {'val1': 2, 'val2': 6}}
>>> sum(x['val1'] for x in d.values())
5

要汇总all子项的值,可以使用collections.Counter

collections.Counter

1
投票

您可以遍历字典的键并检索值以将它们添加到变量中。

因此,您首先需要声明>>> from collections import Counter >>> counter = sum(map(Counter, d.values()), Counter()) >>> dict(counter) {'val2': 11, 'val1': 5} 变量,并将它们存储在总和中,然后遍历字典中的每个键,以将相应的值添加到sum变量中。您将来还可以通过添加sumval3sum3val4等轻松地添加更多值。这是一个示例:

sum4

此打印:

my_dict = {'A':{'val1':3,'val2':5},'B':{'val1':2,'val2':6}}

# initiate variables to store the sums
sum1, sum2 = (0,) * 2

# iterate through the keys of your dict and increment the sum variables
for key in my_dict:
    sum1 += my_dict[key]['val1']
    sum2 += my_dict[key]['val2']

print(sum1)
print(sum2)

[而且,正如@jpp所提到的,永远不要在类后命名变量,因此也不要命名字典5 11 ,例如您可以将其命名为dict


0
投票

您可以将字典中每个元素的总和存储在新字典中

my_dict

0
投票

使用dict = {'A':{'val1':3,'val2':5},'B':{'val1':2,'val2':7}} sums = {} sum = 0 for element in dict: for key in dict[element]: sum += dict[element][key] sums[element] = sum sum = 0 print(sums['A']) # 8 print(sums['B']) # 9

collections.Counter

也请注意,您不应将字典命名为collections.Counter。它隐藏了内置的>>> from collections import Counter >>> d = {'A':{'val1':3,'val2':5},'B':{'val1':2,'val2':6}} >>> sum((Counter(d[x]) for x in d), Counter()) Counter({'val2': 11, 'val1': 5}) 功能。


0
投票

我建议您使用这种易于理解和理解的解决方案,该解决方案将对每个键/值对进行迭代,以使用值的总和来更新新字典,而不管输入字典的大小如何。我还将输入字典重命名为dict而不是dict,因为dict是Python内置类的名称:

d

0
投票

您可以找到相关键的并集。然后使用字典理解来构建将这些键映射到它们的和的字典:

dict
© www.soinside.com 2019 - 2024. All rights reserved.