2015-05-11 4 views
1

У меня есть словарь 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 содержал кортеж размера, который соответствует длине, которую я должен использовать?

ответ

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)} 
Смежные вопросы