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

2024-09-28 01:25:13 发布

您现在位置: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英镑

为了得到这个和,我每做一次进一步循环的尝试都会导致错误

是循环的方式来做这件事,如果是如何?还是有其他更好的方法? 谢谢


Tags: in数据结构目标列表forallactpart2
3条回答

可以将sum函数与一个生成器表达式一起使用,该表达式遍历dict和sub dict的值:

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

这将返回:

250

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

原因是首先

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)

希望有帮助

您可以将列表理解与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

相关问题 更多 >

    热门问题