В Python, как суммировать список чисел в кортеже, в списке в словаре? - PullRequest
2 голосов
/ 15 февраля 2012
huge =  sum([x for key in G for (_,x) in G[key]]+1)

Это то, что я имею до сих пор, хотя он возвращает ошибку типа, может только объединить список (не "int") в список, который я не понимаю.

По сути, я имею дело со структурой данных, что-то вроде

{1: [("A",2), ("B",3)]}

и так далее, так что каждый ключ в словаре имеет значение, которое является списком кортежей, а второй элемент, index = 1 каждого кортежа, - это значения, которые я хочу суммировать, поэтому в примере I дал:

huge = 5   # i.e. 2 + 3

Любой совет ??

Ответы [ 7 ]

5 голосов
/ 15 февраля 2012
>>> G = {1:[("A",2),("B",3)]}
>>> sum(y for v in G.itervalues() for (x, y) in v)
5

Ошибка происходит от выражения [x for key in G for (_,x) in G[key]] + 1, которое пытается добавить список и номер. Это TypeError.

1 голос
/ 15 февраля 2012

Я думаю, что вы ищете что-то вроде этого:

for itertools import chain
sum([v for _, v in chain.from_iterable(G.values())])

или с ленивой оценкой:

sum(v for _, v in chain.from_iterable(G.itervalues()))
0 голосов
/ 15 февраля 2012

Вы говорите, что только хотите подвести итог кортежей в списке G [1]?Если это так, то это то, что вам нужно:

huge = sum(x for _, x in G[1])

Примечание: вам не нужно создавать новый список перед его суммированием;пропуск квадратных скобок делает это за один проход.

0 голосов
/ 15 февраля 2012

Я думаю, у нас еще не было

sum(group[1] for value in data.itervalues() for group in value)

.

0 голосов
/ 15 февраля 2012

Это может быть не самый Pythonic, но это просто:

my_map = {1:[("A",1),("B",2)],2:[("C",3),("D",4)]}

total = 0

for k in my_map.keys():
    this_list = my_map[k]
    for this_tuple in this_list:
        total += this_tuple[1]

print total
0 голосов
/ 15 февраля 2012
sum = 0
for key, item in data.iteritems():
    for group in item:
        sum += group[-1]

Должно работать нормально.

НЕ все должно быть пониманием списка

0 голосов
/ 15 февраля 2012

Мой питон ржавый, но у тебя по существу

huge = sum([...list...] + 1)

Я жалею, что вы добавляете 1 в список. Вы имели в виду:

huge = sum([...list...]) + 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...