我有一个字典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包含与我必须使用的长度相匹配的大小的元组?
答案 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)}