Trouver le plus populaire des mots dans une liste
J'ai une liste de mots:
words = ['all', 'awesome', 'all', 'yeah', 'bye', 'all', 'yeah']
Et je veux obtenir une liste de tuples:
[(3, 'all'), (2, 'yeah'), (1, 'bye'), (1, 'awesome')]
où chaque tuple est...
(number_of_occurrences, word)
La liste doit être triée par le nombre d'occurrences.
Ce que j'ai fait jusqu'à présent:
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 question est...
Est-il Pythonic, élégant et efficace?
Êtes-vous capable de faire mieux?
Merci à l'avance.
OriginalL'auteur Maciej Ziarko | 2011-03-08
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le compteur pour cela.
Il donne le n-uplet avec inversée colonnes.
De commentaires: les collections.compteur >=2.7,3.1. Vous pouvez utiliser le compteur recette pour les versions inférieures.
Vous pouvez utiliser cette recette si vous utilisez une ancienne version de python. Je pense qu'il donne la même interface.
Mon tuples ont inversé les colonnes simplement parce que c'était plus simple pour moi de faire le tri. 🙂 J'aime bien vous répondre, car il est très élégant, et je n'ai pas l'esprit à l'aide de Python 2.7.
OriginalL'auteur SiggyF
La defaultdict collection est ce que vous cherchez:
Qui vous donne un dict où les clés sont les mots et les valeurs des fréquences. Pour accéder à votre (fréquence, word) n-uplets:
Si à l'aide de Python 2.7+/3.1+vous pouvez faire le premier pas avec un builtin
Counter
classe:OriginalL'auteur Triptych
Me semble bon...
"mieux"? Si c'est compréhensible et efficace, n'est-ce pas suffisant?
Peut-être regarder
defaultdict
à utiliser à la place de setdefault."Je suis un Python élève, l'apprentissage de tous les jours." Donc je suis.: -)
BTW: defaultdict fait ma journée!
OriginalL'auteur Jason S