Python字典和值

时间:2011-07-14 17:47:24

标签: python dictionary sum

我正在使用Python 2.7,我有一个看起来有点像这样的大字典

{J: [92704, 238476902378, 32490872394, 234798327, 2390470], M: [32974097, 237407, 3248707, 32847987, 34879], Z: [8237, 328947, 239487, 234, 182673]}

如何通过值对这些进行求和来创建一个新的字典,该字典对每个字典中的第一个值进行求和,然后对第二个值进行求和,等等。

{FirstValues: J[0]+M[0]+Z[0]}

5 个答案:

答案 0 :(得分:3)

In [4]: {'FirstValues': sum(e[0] for e in d.itervalues())}
Out[4]: {'FirstValues': 33075038}

其中d是你的字典。

答案 1 :(得分:1)

print [sum(row) for row in zip(*yourdict.values())]

yourdict.values()获取所有列表,zip(* )将第一个,第二个等项组合在一起,并sum对每个组进行求和。

答案 2 :(得分:1)

from itertools import izip_longest
totals = (sum(vals) for vals in izip_longest(*mydict.itervalues(), fillvalue=0))
print tuple(totals)

英文...

  1. 将列表(dict值)压缩在一起,填充为0(如果需要,则不必)。
  2. 对每个压缩组进行求和
  3. 例如,

    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处的所有值的总和。

    如果必须有一个字典,请取totals迭代器并将其转换成字典:

    new_dict = dict(('Values%d' % idx, val) for idx, val in enumerate(totals))
    

答案 3 :(得分:1)

我不知道为什么你需要字典作为输出,但这里是:

dict(enumerate( [sum(x) for x in zip(*d.values())] ))

答案 4 :(得分:0)

说你有一些像这样的词典:

d = {'J': [92704, 238476902378, 32490872394, 234798327, 2390470], 
     'M': [32974097, 237407, 3248707, 32847987, 34879], 
     'Z': [8237, 328947, 239487, 234, 182673]}

制作defaultdict(int)

from collections import defaultdict
sum_by_index = defaultdict(int)
for alist in d.values():
    for index,num in enumerate(alist): 
        sum_by_index[index] += num