为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

哈士奇WWW 2021-10-19 16:17:22
我的数据结构如下: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)它返回100125250虽然我想得到总和,即 250我为了得到这个总和而进一步循环的每一次尝试都导致了错误。是循环的方式来做到这一点,如果是的话如何?或者有另一种/更好的方法来达到它吗?谢谢
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

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

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

这将返回:

250

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


查看完整回答
反对 回复 2021-10-19
?
BIG阳

TA贡献1859条经验 获得超6个赞

原因是首先


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)

希望能帮助到你


查看完整回答
反对 回复 2021-10-19
?
拉风的咖菲猫

TA贡献1995条经验 获得超2个赞

您可以使用列表理解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


查看完整回答
反对 回复 2021-10-19
  • 3 回答
  • 0 关注
  • 236 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信