de retour de la sortie du dictionnaire par ordre alphabétique
Le code suivant affiche le mot dans le fichier txt et ensuite la façon dont de nombreux cas, il ya de mot (par exemple, a, 26) le problème est qu'il n'a pas l'imprimer dans l'ordre alphabétique. Toute aide serait grandement appréciée
import re
def print_word_counts(filename):
s=open(filename).read()
words=re.findall('[a-zA-Z]+', s)
e=[x.lower() for x in (words)]
e.sort()
from collections import Counter
dic=Counter(e)
for key,value in dic.items():
print (key,value)
print_word_counts('engltreaty.txt')
OriginalL'auteur user2101517 | 2013-05-17
Vous devez vous connecter pour publier un commentaire.
Vous avez juste besoin de trier les éléments. Le groupe builtin
sorted
devrait fonctionner à merveille:Si vous déposez le
e.sort()
ligne, alors ce devrait être d'environ la même quantité de temps. La raison qu'il ne fonctionne pas est parce que les dictionnaires sont basés surhash
tables qui stockent les éléments dans l'ordre de leurs valeurs de hachage (avec un peu plus de trucs compliqués lors des collisions de hachage). Puisque la fonction de hachage n'est jamais spécifié nulle part, cela signifie que vous ne pouvez pas compter sur un dictionnaire en gardant toute commande que vous essayez de lui donner et que l'ordre est mise en œuvre et dépendant de la version. Pour les autres cas simples, lacollections
module dispose d'unOrderedDict
sous-classe qui ne garder que la commande d'insertion. cependant, ce n'est pas vraiment vous aider ici.Juste ceci: triés(dic.items()) a fonctionné pour moi, merci.
ce que je ne veux juste les touches, mais l'ensemble de paires clé-valeur, classés par ordre alphabétique?
Je ne suis pas sûr de comprendre la question... La
items()
est un objet iterable de 2-tuples (paires clé-valeur). Le 2-n-uplets va trier de manière lexicographique. Cela permettra de trier sur les touches de la première (et dans le cas d'une égalité, alors la valeur sera comparée). Bien sûr, puisque c'est un dict, nos clés sera unique ... je ne suis pas sûr de ce que tu veux dire par "l'ensemble de paires clé-valeur, classés par ordre alphabétique", Peut-être essayersorted(dic.items(), key=lambda x: x[0] + x[1])
?OriginalL'auteur mgilson
Note
Counter
est une sous-classe dedict
de tri avant de les ajouter àCounter
:de ne pas atteindre l'ordre.
OriginalL'auteur jamylak