我有一个嵌套字典的结构。当我访问最外层字典中某个键的值时,它将返回以下内容。
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}
由于字典中有很多键,这些如何加起来,我该如何以一种经济高效的方式进行处理?
谢谢!
答案 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
)