2013-04-11 2 views
5

Вот мой список кортежей:Сумма кортежи, если одинаковые значения

regions = [(23.4, 12, 12341234), 
      (342.23, 19, 12341234), 
      (4312.3, 12, 12551234), 
      (234.2, 12, 12341234)] 

Я пытаюсь подвести первое значение индекса в списке кортежей, где значения с индексами 1 и 2 идентичны. Обратите внимание, что регионы [0] и регионы [3] имеют одинаковые значения с индексами 1 и 2.

Мой желаемый список:

result = [(257.6, 12, 12341234), 
      (342.23, 19, 12341234), 
      (4312.3, 12, 12551234)] 

Я понимаю, что, вероятно, нужно, чтобы сохранить его в качестве словаря первый , вероятно, со вторым значением в качестве первого ключа и третьим значением в качестве второго ключа и суммированием, если оно уже существует. Просто интересно, есть ли лучший или более простой способ: я думаю, возможно, используя некоторую функцию пересечения.

+2

Выполняется ли упорядочение кортежей в результате? – NPE

+0

@NPE нет нет. – bozdoz

ответ

6
from collections import defaultdict 

sums = defaultdict(float) 
for c, a, b in regions: 
    sums[a, b] += c 
result = [(csum, a, b) for (a, b), csum in sums.iteritems()] 

Для этого не существует встроенной функции; это слишком специализированная задача.

+0

Ударьте мне это - и более полно :) –

+1

результаты должны быть суммами, правильно? – bozdoz

+0

и '.iteritems()' лучше/отличается от '.items()'? – bozdoz

Смежные вопросы