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

我的数据结构如下:


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


我为了得到这个总和而进一步循环的每一次尝试都导致了错误。


是循环的方式来做到这一点,如果是的话如何?或者有另一种/更好的方法来达到它吗?谢谢


哈士奇WWW
浏览 237回答 3
3回答

泛舟湖上清波郎朗

您可以将该sum函数与生成器表达式一起使用,该表达式遍历 dict 和子 dicts 的值:sum(n for d in a.values() for n, _ in d.values())这将返回:250请注意,这all是一个内置函数名称,因此我已将all您问题中的变量重命名为a。

BIG阳

原因是首先for partData in all.values():    depPart = 0    for act in partData.keys():        depPart += partData[act][0]       print(depPart)在第 2 行,depPart=0每次您从所有print(depPart)打印值中获取一个值时, 每次它都会对每个值中的每个值求和,因此您的代码应该是depPart = 0for 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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python