tengo una lista de palabras:Encontrar las palabras más populares en una lista
words = ['all', 'awesome', 'all', 'yeah', 'bye', 'all', 'yeah']
Y quiero obtener una lista de tuplas:
[(3, 'all'), (2, 'yeah'), (1, 'bye'), (1, 'awesome')]
donde cada tupla es ...
(number_of_occurrences, word)
La lista debe ordenarse por el número de veces.
Lo que he hecho hasta ahora:
def popularWords(words):
dic = {}
for word in words:
dic.setdefault(word, 0)
dic[word] += 1
wordsList = [(dic.get(w), w) for w in dic]
wordsList.sort(reverse = True)
return wordsList
La pregunta es ...
Es Pythonic, elegante y eficiente? ¿Puedes hacerlo mejor? Gracias de antemano.
Solo en Python 2.7+ o 3.1+. Ninguno de los dos se usa mucho, así que vale la pena mencionarlo. – Triptych
Puede usar [esta receta] (http: //code.activestate.com/recipes/576611-counter-class /) si aún usa una versión anterior de python. Creo que da la misma interfaz. – SiggyF
Mis tuplas han invertido columnas simplemente porque era más sencillo para mí ordenarlas. :) Me gusta que respondas, ya que es muy elegante y no me importa usar Python 2.7. –