from itertools import izip_longest
totals = (sum(vals) for vals in izip_longest(*mydict.itervalues(), fillvalue=0))
print tuple(totals)
На английском языке ...
- объединить списки (значения dict) вместе, добавив 0 (если вы хотите, вам не нужно).
- Суммируйте каждую заархивированную группу
Например,
mydict = {
'J': [1, 2, 3, 4, 5],
'M': [1, 2, 3, 4, 5],
'Z': [1, 2, 3, 4]
}
## When zipped becomes...
([1, 1, 1], [2, 2, 2], [3, 3, 3], [4, 4, 4], [5, 5, 0])
## When summed becomes...
(3, 6, 9, 12, 10)
Не имеет смысла создавать новый словарь, поскольку новые ключи (вероятно) бессмысленны.Результаты не относятся к исходным ключам.Более подходящим является кортеж, так как results[0]
содержит сумму всех значений в позиции 0 в исходных значениях dict и т. Д.
Если вы должны иметь dict, возьмите итератор totals
и превратить его в диктовку так:
new_dict = dict(('Values%d' % idx, val) for idx, val in enumerate(totals))