python - 减少嵌套字典

标签 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': 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 类型。

关于python - 减少嵌套字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44896999/

相关文章:

java - 如何实现可测试、可维护的实时逻辑?

python - 有没有一种方法可以在python中对dict执行测试和设置操作?

scala - 捕获 map 内的异常

python - 在 Beautiful soup 中解析 html

执行中的Python sqlite3字符串变量

python-2.7 - 使用 Python API 在优化失败后获取 NLOpt 结果

python - 我如何使用堆栈跟踪来告诉我应该为Python的try/except使用哪个异常

python - 如何使用作为参数传递的行号拆分csv文件并保存到不同的文件中

python - 在 Python 中创建圆形饼图子图

python - 将属性添加到 Python 字典中的现有对象