如何在python中对字典中的特定值求和

时间:2019-07-02 18:52:50

标签: python dictionary

我有以下嵌套的字典,需要弄清楚如何对所有“数量”求和。

data1 = {
    'Batch1': {
        'Pink': {'qty': 25, 'ordered': 15},
        'Blue': {'qty': 18, 'ordered': 20}
    },
    'Batch2': {
        'Coke': {'qty': 50, 'ordered': 100},
        'Sprite': {'qty': 30, 'ordered': 25}
    }
}

结果是123。

2 个答案:

答案 0 :(得分:4)

您可以使用sum

data1 = {'Batch1': {'Pink': {'qty': 25, 'ordered':15}, 'Blue': {'qty':18, 'ordered':20}}, 'Batch2': {'Coke': {'qty': 50, 'ordered': 100},'Sprite': {'qty':30, 'ordered':25}}}
result = sum(b['qty'] for c in data1.values() for b in c.values())

输出:

123

答案 1 :(得分:0)

您的data1的格式很有趣,所以这是我的用法:

{'Batch1': {'Blue': {'ordered': 20, 'qty': 18},
  'Pink': {'ordered': 15, 'qty': 25}},
 'Batch2': {'Coke': {'ordered': 100, 'qty': 50},
  'Sprite': {'ordered': 25, 'qty': 30}}}

如果不确定dict的嵌套深度,可以编写一个函数来递归地遍历嵌套的dict,以寻找qty键并求和:

def find_key_vals(query_key, base_dict):
    values = []
    for k, v in base_dict.items():
        if k == query_key:
            values.append(v)
        elif isinstance(v, dict):
            values += find_key_vals(query_key, v)
    return values

find_key_vals('qty', data1)
# => [50, 30, 25, 18]

sum(find_key_vals('qty', data1))
# => 123