通常我会使用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维度,因此我可以相当容易地直接添加值。但是当字典变大时,这种方法是不实用的。所以我想知道什么是最有效的解决方案。
提前致谢
答案 0 :(得分:1)
您可以遍历dict的键并检索值以将它们添加到变量中。
因此,您首先要声明将存储和的sum
变量,然后遍历dict中的每个键,将相应的值添加到sum
变量中。您还可以通过添加val3
和sum3
,val4
和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)
打印:
5
11
此外,正如@jpp所提到的,永远不要在课程后命名变量,所以不要为你的词典dict
命名,例如你可以命名为my_dict
答案 1 :(得分:0)
要对单个子项的值求和,可以将sum()
与生成器表达式一起使用:
>>> d = {'A': {'val1': 3,'val2': 5}, 'B': {'val1': 2, 'val2': 6}}
>>> sum(x['val1'] for x in d.values())
5
要对所有子项的值求和,您可以使用collections.Counter
:
>>> from collections import Counter
>>> counter = sum(map(Counter, d.values()), Counter())
>>> dict(counter)
{'val2': 11, 'val1': 5}
答案 2 :(得分:0)
>>> 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})
另请注意,您不应将字典命名为dict
。它会隐藏内置的dict
函数。
答案 3 :(得分:0)
我建议你这个易于阅读和理解的解决方案,它迭代每个键/值对,用值的总和更新一个新词典,无论输入词典的大小如何。我还将输入字典重命名为d
而不是dict
,因为dict
是Python内置类的名称:
from collections import defaultdict
d = {'A':{'val1':3,'val2':5},'B':{'val1':2,'val2':6}}
sumDict = defaultdict(int)
for v1 in d.values():
for k2,v2 in v1.items():
sumDict[k2] += v2
print(dict(sumDict)) # {'val1': 5, 'val2': 11}
print(sumDict['val1']) # 5
print(sumDict['val2']) # 11
答案 4 :(得分:0)
您可以将dict中每个元素的总和存储在新词典中
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
答案 5 :(得分:0)
您可以找到相关键的并集。然后使用字典理解来构造将这些键映射到它们的总和的字典:
d = {'A':{'val1':3,'val2':5},'B':{'val1':2,'val2':6}}
sum_keys = set().union(*d.values())
sums = {k: sum(d[i].get(k, 0) for i in d) for k in sum_keys}
print(sums)
{'val1': 5, 'val2': 11}