2011-07-14 85 views
0

我使用Python 2.7和我有一个大字典,看起来有点像这样Python字典和值

{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]} 

+0

到底是什么问题?迭代字典有问题吗? –

+0

1.)第一个例子中的'J'是什么? 2)[1,2,3]是一个列表而不是字典 –

回答

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

其中d是你的字典。

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

yourdict.values()得到所有的列表,zip(*)基团的第一,第二等的物品一起和sum求和每个组。

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 
1
from itertools import izip_longest 
totals = (sum(vals) for vals in izip_longest(*mydict.itervalues(), fillvalue=0)) 
print tuple(totals) 

在英语......

  1. 压缩列表(字典值)一起填充0(如果你想,你不必)。
  2. 总和每个压缩组

例如,

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)) 
1

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

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