嵌套字典中的值求和

时间:2019-08-28 16:06:21

标签: python-3.x dictionary

我有一个嵌套字典的结构。当我访问最外层字典中某个键的值时,它将返回以下内容。

print d['key1'].values()    

dict_values([{'4a3': 22, '4a1': 10, '3a1': 1}, {'4a3': 16, '4a1': 4, '3c1': 2}])

我想对上面的每个唯一键求和,然后将其除以该键的总数(在本例中为55),因此对于上面的示例:

{'4a3': 0.69, '4a1': 0.25, '3a1': 0.02, '3ac': 0.04} 

由于字典中有很多键,这些如何加起来,我该如何以一种经济高效的方式进行处理?

谢谢!

2 个答案:

答案 0 :(得分:3)

您可以使用defaultdict,其中键是字典列表中的不同键,其值是它们的计数,也可以使用total变量存储总计数:

vals = [{'4a3': 22, '4a1': 10, '3a1': 1}, {'4a3': 16, '4a1': 4, '3c1': 2}]

from collections import defaultdict

result = defaultdict(int)

total = 0

for d in vals:
  for k, v in d.items():
    result[k] += v
    total += v

for k in result:
  result[k] = round(result[k] / total, 2)

print(result)

输出:

defaultdict(<class 'int'>, {'4a3': 0.69, '4a1': 0.25, '3a1': 0.02, '3c1': 0.04})

如果您要听写,可以执行以下操作:

result = dict(result)

输出:

{'4a3': 0.69, '4a1': 0.25, '3a1': 0.02, '3c1': 0.04}

答案 1 :(得分:0)

我想就是这样

aggregate_dict = dict()
for el in d['key1']:
    for key, val in dict.iteritems():
        if aggregate_dict.has_key(key):
            aggregate_dict[key]+= val
        else:
            aggregate_dict[key] = val

total_count = sum(aggregate_dict.values())

result = { key : round(float(val)/total_count, 2) for key, val in aggregate_dict.iteritems() }

我现在只有python 2.7,我认为您不需要在python3中使用float(val)(我认为您还需要将iteritems更改为items