Удаление дубликатов участников из списка кортежей - PullRequest
0 голосов
/ 24 октября 2010

этот вопрос может иметь сходство в SO, но мой случай немного отличается. и я попытался адаптировать эти ответы к своей проблеме, но не смог. так вот в чем дело: У меня есть этот список:

[(['c', 'a', 'b'], 10), (['c', 'a', 'b'], 9),(['h','b'],2)] например.

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

[(['c', 'a', 'b'], 10),(['h','b'],2)]

Кто-нибудь может мне помочь? порядок пунктов во внутренних списках очень важен. спасибо

Ответы [ 2 ]

3 голосов
/ 24 октября 2010
>>> lst = [(['c', 'a', 'b'], 10), (['c', 'a', 'b'], 9),(['h','b'],2)]
>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> for i, j in lst:
    d[tuple(i)] = max(d[tuple(i)], j)          # assuming positive numbers


>>> d
defaultdict(<class 'int'>, {('h', 'b'): 2, ('c', 'a', 'b'): 10})
2 голосов
/ 24 октября 2010

Если, как показывает ваш пример, элементы уже отсортированы по номерам (в вашем случае в обратном порядке), вы можете сделать:последнее увиденное значение для ключа сохраняется.Таким образом, если они отсортированы в обратном порядке, последнее увиденное значение при итерации в обратном порядке будет наибольшим.В противном случае используйте @ SilentGhost`s answer .

...