2010-08-03 17 views
2

Le contenu de mon dictionnaire est comme ceci: -ont besoin d'aide fonction de tri en python

>>> dict 
{'6279': '45', '15752': '47', '5231': '30', '475': '40'} 

J'ai essayé d'utiliser la fonction de tri sur les touches. J'ai remarqué que la fonction de tri ne fonctionne pas pour la clé - 15752. S'il vous plaît trouverez ci-dessous: -

>>> [k for k in sorted(dict.keys())] 
['15752', '475', '5231', '6279'] 

Quelqu'un pourrait-il indiquer un moyen pour moi de travailler autour de cela?

Merci


Ma sortie attendue est: -

['475', '5231', '6279', '15752'] 
+1

Quelle est votre sortie désirée? Vous avez démontré un tri des clés, c'est tout. Ou est-ce que ça ne fonctionne pas comme vous le voudriez? Vous obtenez le tri du texte pas le type numérique? –

+0

Python fait juste ce que vous lui avez dit de faire. La façon dont vous avez appelé sorted() fonctionne sur la liste des clés du dictionnaire. Puisque les clés sont des chaînes, '15752' apparaît en premier ('1' vient avant '4' ...). – GreenMatt

+2

Ne nommez pas votre dictionnaire 'dict'. Vous êtes en train d'observer 'dict()'. –

Répondre

10

ah vous voulez trier par la valeur numérique et non la chaîne de sorte que vous devez convertir les chaînes en nombres à l'aide int(s) à un moment donné avant ou juste utiliser sorted(dict.keys(), key=int)

+2

+1 pour 'key = int' –

+1

trié (dict, key = int) est suffisant – hop

2

Si je pense à mon commentaire avait raison et que vous souhaitez les touches numériques triées changer votre ligne de code à ceci:

sorted([int(k) for k in test.keys()]) 
# returns [475, 5231, 6279, 15752] 
2

S'ils sont ALL ints,

sorted(dict, lambda x, y: cmp(int(x), int(y))) 
+2

vous ne devriez pas utiliser cmp dans cet exemple, utilisez la touche – hop

1

Si vous voulez trier numériquement puis numéros dans votre dictionnaire pas de chaînes alors il va juste travailler

>>> dict 
{6279: '45', 15752: '47', 5231: '30', 475: '40'}