嵌套字典的值之和

3

我需要对一个具有变量数量元素的嵌套字典中所有值的总和进行求和,例如:

a = {'val1': 3, 'val2': 4, 'val3': {'val4': 2, 'val5': 1}, 'val6': {'val7': 9, 'val8': {'val6': 43}}}

假设我有一个像上面的字典。 那么我期望得到的输出是:
3+4+2+1+9+43 = 62

我尝试过这个,但我知道它行不通:
dict_sum = 0
for k, v in a.items():

    if isinstance(v,dict):
        dict_sum += sum(v.values())
    else:
        dict_sum += v

但是对于包含多个嵌套字典的字典,它将无法工作。 感激不尽,期待您的帮助。
2个回答

7

一种方法是使用递归。

例如:

data = {'val1': 3, 'val2': 4, 'val3': {'val4': 2, 'val5': 1}, 'val6': {'val7': 9, 'val8': {'val6': 43}}}

def get_sum(data):
    s = 0
    for _, v in data.items():
        if isinstance(v, dict):
            s += get_sum(v)
        else:
            s += v
    return s
print(get_sum(data))  # --> 62

0

使用列表推导式

a = {'val1': 3, 'val2': 4, 'val3': {'val4': 2, 'val5': 1}, 'val6': {'val7': 9, 'val8': {'val6': 43}}}

def DeepSum(data):
    return sum([x if isinstance(x, int) else DeepSum(x) for x in data.values() ]) 

DeepSum(a)

1
它出现了错误。Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 2, in DeepSum File "<stdin>", line 2, in <listcomp> File "<stdin>", line 2, in DeepSum TypeError: 'int' object is not callable - Markus
@Markus 使用在线编译器 https://onlinegdb.com/B1qDEy81P - Jacek Rojek
但是,我认为它应该也可用于离线操作。如果我在离线状态下无法使用此功能怎么办? - Markus
@Markus 在线编译器证明了代码是正确的,可能是你的机器出了问题。 - Jacek Rojek
我已经讲过了,但我正在使用相同的3.8.3版本。那段代码非常简单,我不知道为什么它不能运行。 - Jacek Rojek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接