Python 减少嵌套字典

Python 减少嵌套字典,python,python-2.7,dictionary,Python,Python 2.7,Dictionary,我试图对以下词典中“销售”项下的所有数字求和: {'a': {'sales': {}, 'revenue': {}}, 'b': {'sales': {}, 'revenue': {}}, 'c': {'sales': {'February2017': 6240.0, 'March2017': 8869.75, 'January2017': 15720.0}, 'revenue': {'February2017': 312.0, 'March2017': 432.4, 'January2017'

我试图对以下词典中“销售”项下的所有数字求和:

{'a': {'sales': {}, 'revenue': {}}, 'b': {'sales': {}, 'revenue': {}}, 'c': {'sales': {'February2017': 6240.0, 'March2017': 8869.75, 'January2017': 15720.0}, 'revenue': {'February2017': 312.0, 'March2017': 432.4, 'January2017': 786.0}}, 'd': {'sales': {'February2017': 4184.9, 'March2017': 6181.709999999999, 'January2017': 6080.55}, 'revenue': {'February2017': 188.86, 'March2017': 292.61, 'January2017': 273.45}}}
 #   
输出应为:6240+8869.75+15720+4184.9+6181.7099+6080.55

我能够一个接一个地循环键,并得到正确的答案,但有没有更有效的方法来做到这一点

total_sum = 0
for key,value in dict.items():
    for key_a, value_a in value['sales'].items():
        total_sum += value_a
例如,有没有一种方法可以通过使用类似于
reduce
的东西来做到这一点

感谢当您可以使用生成器表达式
sum()
时,为什么
reduce()
,例如:

>>> sum(sum(value['sales'].values()) for value in data.values())
47276.91
或者以嵌套形式:

>>> sum(n for value in data.values() for n in value['sales'].values())
47276.91

注意:您不应该调用变量
dict
,因为它隐藏了python的内置
dict
类型。

@Bleh您应该知道这个解决方案是硬编码到您给定的数据的。如果您的数据具有相同的结构,那么这没关系。但是如果它是随机的和武断的,我劝你看看我的。@cᴏʟᴅsᴘᴇᴇᴅ 不确定您的意思,看起来像
sales
键下的月度销售数据。对于结构化数据集来说,递归似乎过于复杂,不必要地使OPs问题复杂化。@AChampion由于OP引入了随机键,因此有可能出现类似于
{'a':{'sales':{'random1':'sales':{……},'random2':{'sales':{……}
您的方法将失败。我将让OP回答这个问题,因为我不确定您在哪里看到随机键:
{':{'sales':{':},'revenue':{':value}}}