2010-10-24 6 views
0

cette question pourrait avoir des similitudes dans SO mais mon cas est un peu différent. et j'ai essayé d'adapter ces réponses à mon problème mais je n'ai pas pu. alors voici la chose: J'ai cette liste:Suppression de doublons membres d'une liste de tuples

[(['c', 'a', 'b'], 10), (['c', 'a', 'b'], 9),(['h','b'],2)] par exemple.

Je souhaite supprimer les doublons de cette liste en conservant un tuple associé au nombre le plus grand. de sorte que la liste devrait ressembler à ceci:

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

quelqu'un peut me aider? l'ordre des éléments dans les listes internes est très important. grâce

+0

Je pense qu'il pourrait être plus judicieux dans le cas d'utiliser un dictionnaire, mappant les listes de caractères à une clé. –

Répondre

3
>>> 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}) 
+1

Vous pouvez alors faire 'list (d.iteritems())' pour revenir à une liste. –

2

Si, comme par exemple l'indique, les éléments sont déjà classés par les chiffres (dans votre inverse de cas), vous pouvez faire:

d = dict(reversed(lst)) 
list(d.iteritems()) 

Le comportement par défaut de la fonction dict() est que la dernière valeur vue pour la clé est stockée. Donc, s'ils sont triés dans l'ordre inverse, la dernière valeur observée lors de l'itération dans l'ordre inverse sera la plus grande. Sinon, utilisez @ SilentGhost answer.