Ordenar tuplas en python según sus valores

Estoy tratando de imprimir las 10 palabras más frecuentes usando el siguiente código. Sin embargo, no está funcionando. ¿Alguna idea de cómo solucionarlo?

def reducer_count_words(self, word, counts): # send all (num_occurrences, word) pairs to the same reducer. # num_occurrences is so we can easily use Python's max() function. yield None, (sum(counts), word) # discard the key; it is just None def reducer_find_max_10_words(self, _, word_count_pairs): # each item of word_count_pairs is (count, word), # so yielding one results in key=counts, value=word tmp = sorted(word_count_pairs)[0:10] yield tmp 

 tmp = sorted(word_count_pairs, key=lambda pair: pair[0], reverse=True)[0:10] 

Explicación:

  • El parámetro key de sorted() permite ejecutar una función en cada elemento antes de la comparación.
  • lambda pair: pair[0] es una función que extrae el número de tus word_count_pairs.
  • reverse clasifica en orden descendente, en lugar de orden ascendente.

Fuentes:


aparte : si tiene muchas palabras diferentes, ordenar la lista completa para encontrar los diez primeros es ineficiente. Hay algoritmos mucho más eficientes. El método most_common() mencionado en otras respuestas probablemente utiliza un algoritmo más eficiente.

Usa collections.Counter y su método most_common :

 >>>from collections import Counter >>>my_words = 'aa foo bar foo' >>>Counter(my_words.split()).most_common() [('foo', 2), ('a', 2), ('b', 1)] 

Usar collections.most_common ()

Ejemplo:

 most_common([n]) Return a list of the n most common elements and their counts from the most common to the least. If n is not specified, most_common() returns all elements in the counter. Elements with equal counts are ordered arbitrarily: >>> from collections import Counter >>> Counter('abracadabra').most_common(3) [('a', 5), ('r', 2), ('b', 2)]