是否可以循环对嵌套字典中的列表中的值求和?

时间:2019-01-24 14:15:34

标签: python

我的数据结构如下:

all= {
        'part1': {'act1': [0, 0], 'act2': [100, 0]},
        'part2': {'act1': [25, 1], 'act2': [100, 1]}, 
        'part3': {'act1': [25, 0], 'act2': [0, 1]}, 
        'part4': {'act1': [0, 0], 'act2': [0, 1]}
        }

我的目标是获取列表中所有第一项的总和。

到目前为止,我仅使用以下代码设法获得了顶级词典的每个键的总和:

for partData in all.values():
    depPart = 0
    for act in partData.keys():
        depPart += partData[act][0]   
    print(depPart)

返回

100
125
25
0

同时我想得到总和,即250

我为获得该总和而进行的每一次尝试都导致错误。

是否正在循环执行此操作,如果可以,如何执行?还是有另一种/更好的方法去实现它? 谢谢

3 个答案:

答案 0 :(得分:3)

您可以将sum函数与生成器表达式一起使用,该表达式对dict和sub-dict的值进行迭代:

sum(n for d in a.values() for n, _ in d.values())

这将返回:

250

请注意,all是内置函数名称,因此我将问题中的all变量重命名为a

答案 1 :(得分:1)

原因是首先

for partData in all.values():
    depPart = 0
    for act in partData.keys():
        depPart += partData[act][0]   
    print(depPart)

在第2行depPart=0上,每次从所有print(depPart)打印出一个值时,每次都会将每个值中的每个值相加,因此代码应该是

depPart = 0
for partData in all.values():
    for act in partData.keys():
        depPart += partData[act][0]   
print(depPart)

希望有帮助

答案 2 :(得分:0)

您可以对sum使用列表推导:

d = {'part1': {'act1': [0, 0], 'act2': [100, 0]}, 'part2': {'act1': [25, 1], 'act2': [100, 1]}, 'part3': {'act1': [25, 0], 'act2': [0, 1]}, 'part4': {'act1': [0, 0], 'act2': [0, 1]}}
_sum = sum(sum(a for a, *_ in c.values()) for c in d.values())

输出:

#[100, 125, 25, 0]
250