Meilleure façon de tour liste de mots en fréquence dict
Quel est le meilleur moyen de convertir une liste ou un tuple dans un dictionnaire dont les clés sont les valeurs distinctes de la liste et les valeurs sont les fréquences de ces valeurs distinctes?
En d'autres termes:
['a', 'b', 'b', 'a', 'b', 'c']
-->
{'a': 2, 'b': 3, 'c': 1}
(J'ai dû faire quelque chose comme ci-dessus de nombreuses fois, il n'y a rien dans la lib standard qui le fait pour vous?)
EDIT:
Jacob Gabrielson points là-bas est quelque chose à venir dans la lib standard pour les 2,7/3.1 branche
- Peut-être définir ce que vous entendez par mieux? Plus efficace? Moins de code? Les plus faciles à comprendre?
Vous devez vous connecter pour publier un commentaire.
Genre de
Qui fonctionne généralement bien.
Je trouve que le plus facile à comprendre (bien que peut-être pas le plus efficace) est de faire:
Juste une remarque, en commençant avec Python 2.7/3.1, cette fonctionnalité sera intégrée dans le
collections
module, voir ce bug pour plus d'informations. Voici l'exemple de la notes de version:Counter(word_list)
.C'est une abomination, mais:
Je ne peux pas penser à une raison de choisir cette méthode sur S. Lott, mais si quelqu'un va le montrer, il pourrait aussi bien être moi. 🙂
sort words.txt | uniq -c
de la châtaigne dans le shell est dur à battre.En fait, la réponse de Compteur a déjà été mentionné, mais nous pouvons encore faire mieux (plus facile)!
Je dois partager intéressant mais un peu ridicule façon de faire que je suis juste venu avec:
J'ai décidé d'aller de l'avant et de tester les versions suggéré, j'ai trouvé le
collections.Counter
comme suggéré par Jacob Gabrielson pour être le plus rapide, suivi par ledefaultdict
version par SLott.Voici mes codes :
à partir de collections d'importation defaultdict
à partir de collections d'importation Contre
Et mes résultats:
Ne laissez-moi savoir Comment je peux améliorer l'analyse.
Je pense que l'utilisation de la collection de la bibliothèque est le moyen le plus facile de l'obtenir. Mais Si vous voulez obtenir la fréquence dictionnaire sans l'utiliser ensuite c'est une autre façon,
op: