元组中的和值(dict中的值)

时间:2015-05-11 09:42:28

标签: python python-2.7 dictionary tuples

我有一个字典data,看起来像样本值:

defaultdict(<type 'list'>, 
{(None, 2014): [(5, 1), (10, 2)], 
(u'Middle', 2014): [(6, 2), (11, 3)],
(u'SouthWest', 2015): [(7,3), (12, 4)]})

我从collections.defaultdict(list)得到此信息,因为我的密钥必须是列表。

我的目标是获取一个新字典,其中包含每个元组的总和值,以及它们在元组中的位置。

运行

out = {k:(sum(tup[0] for tup in v),sum(tup[1] for tup in v)) for k,v in data.items()}

我得到了

{(None, 2014): (15, 3),  (u'Middle', 2014): (17, 5), (u'SouthWest', 2015): (19, 7)}

但是,我事先并不知道每个元组中有多少项,因此使用带有硬编码索引的sum(tup[0] for tup in v)不是一种选择。但是,我知道元组中有多少个整数。这个值是一个整数,我得到了data dict。所有元组的长度始终相同(在本例中,长度为2)。

我如何告诉Python我希望out dict包含与我必须使用的长度相匹配的大小的元组?

1 个答案:

答案 0 :(得分:3)

我想你想要built-in zip function

In [26]: {k: tuple(sum(x) for x in zip(*v)) for k, v in data.items()}
Out[26]: 
{('SouthWest', 2015): (19, 7),
 (None, 2014): (15, 3),
 ('Middle', 2014): (17, 5)}