2017-09-27 4 views
-2

J'ai lu et essayé d'implémenter des suggestions de Stack Overflow.Tri d'une liste de tuples par le compteur Python

En Python 3.6+ J'ai une liste de tuples qui ressemble à ceci:

tuple_list=[(a=3,b=gt,c=434),(a=4,b=lodf,c=We),(a=3,b=gt,c=434)] 

créé par

for row in result:  
    tuple_list.append(var_tuple(row['d'], row['f'], row['q'])) 

Je veux compter le nombre de doublons dans la liste et puis trier la liste de sorte que le nombre avec les doublons les plus élevés est en haut de sorte que j'ai utilisé

tuple_counter = collections.Counter(tuple(sorted(tup)) for tup in tuple_list) 

Mais e est en erreur, car les retours

TypeError: unorderable types: int() < str() 

J'ai aussi essayé cela, mais il ne semble pas trier par le plus haut comptoir.

tuple_counter = collections.Counter(tuple_list) 
tuple_counter = sorted(tuple_counter, key=lambda x: x[1]) 

Outre cette

tuple_counter = collections.Counter(tuple_list) 
tuple_counter = tuple_counter.most_common() 

est-il une meilleure façon de le faire?

+4

Vous avez une erreur de syntaxe à la ligne 1, je n'ai pas voté vers le bas, mais vous devriez montrer un 'tuple_list' valide, nous pouvons utiliser –

+0

Attendez, pourquoi' tuple_counter.most_common() 'ne fonctionne pas? –

+0

@JaredGoguen parce que 'trié (tup)' échoue * façon * avant même d'avoir un 'tuple_counter'. Vois ma réponse. – HyperNeutrino

Répondre

1

tuple contient différents type s

tuple_counter = collections.Counter(tuple(sorted(tup)) for tup in tuple_list) 

Cette erreur ligne disant que int < str ne peut être commandé. avant que tout cela soit évalué, l'expression du générateur doit être, et sorted(tup) se brise immédiatement. Pourquoi? De l'erreur, je suis convaincu que tup contient à la fois des entiers et des chaînes. Vous ne pouvez pas trier des entiers et des chaînes dans la même liste car vous ne pouvez pas comparer un entier et une chaîne avec <. Si vous avez une méthode de comparaison int s et str s, essayez sorted(tup, key = function) avec votre fonction pour commander int s et str s.

Puisque vous voulez compter le nombre d'occurrences, essayez ceci:

sorted_tuples = sorted(tuple_list, key = tuple_list.count) 

Cette trie les tuples en utilisant la fonction de compteur de tuple_list comme une clé. Si vous voulez trier par ordre décroissant, faites sorted(tuple_list, key = tuple_list.count, reversed = True).