Эффективно преобразовать список кортежей в набор с соответствующей суммой - PullRequest
0 голосов
/ 01 июля 2018

У меня есть такой список:

x = [(('abc', 'def'), 1), (('foo', 'bar'), 0), (('def', 'abc'), 3)]

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

[(('abc', 'def'), 4),  (('foo', 'bar'), 0)]

Какой эффективный способ сделать это в Python?

Он отличается от этого , поскольку я спрашиваю о кортеже кортежа, в котором первый параметр неупорядочен.

1 Ответ

0 голосов
/ 01 июля 2018

Вы можете использовать collections.Counter для этого

from collections import Counter

c = Counter()
for k,v in x:
    c[tuple(sorted(k))] += v

print(c)
# Counter({('abc', 'def'): 4, ('bar', 'foo'): 0})

print (list(c.items()))
# [(('abc', 'def'), 4), (('bar', 'foo'), 0)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...