Python 2.5 dictionnaire 2 clés de tri
J'ai un dictionnaire de 200 000 documents (les clés sont des chaînes de caractères et les valeurs sont des nombres entiers).
Quel est le meilleur/le plus pythonic façon d'imprimer les éléments triés par ordre décroissant puis croissant de la clé (c'est à dire un 2 clé de tri)?
a={ 'keyC':1, 'keyB':2, 'keyA':1 }
b = a.items()
b.sort( key=lambda a:a[0])
b.sort( key=lambda a:a[1], reverse=True )
print b
>>>[('keyB', 2), ('keyA', 1), ('keyC', 1)]
Voir ma réponse à une question connexe here.
OriginalL'auteur | 2008-10-01
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas trier les dictionnaires. Vous devez trier la liste des éléments.
Versions précédentes ont été mauvais. Lorsque vous avez une valeur numérique, il est facile de les trier dans l'ordre inverse. Ces va le faire. Mais ce n'est pas général. Cela ne fonctionne que parce que la valeur est numérique.
Voici une autre, à l'aide d'une fonction explicite au lieu d'un lambda et le cpm au lieu de la touche option.
La plus générale de la solution est en fait deux sortes
Yep. Compris. Désolé. Republié avec des corrections.
Le troisième exemple n'est pas un 2 clés de tri, le deuxième type annule la première
Reyes: le python, le tri est un tri stable. Lors du tri d'abord sur la moindre clés, le résultat final est atteint.
Reyes: docs.python.org/lib/typesseq-mutable.html
OriginalL'auteur S.Lott
Il trie par valeur, pas de clé.
OriginalL'auteur Ricardo Reyes
Les plus pythonic façon de le faire serait d'en savoir un peu plus sur les données réelles, plus précisément, la valeur maximale que vous pouvez avoir, et ensuite de faire comme ceci:
mais, sauf si vous connaissez déjà la valeur maximale, la recherche de la valeur maximale des moyens boucle par le dict un temps supplémentaire (avec
max(thedict.itervalues())
), ce qui peut être coûteux. Sinon, un keyfunc version de S. Lott solution:Une alternative qui ne se soucient pas des types serait une fonction de comparaison:
et cette solution fonctionne pour n'importe quel type de clé et de la valeur que vous voulez mélanger ascendant et descendant de tri avec la même clé. Si vous la valeur de concision, vous pouvez écrire sortcmp:
OriginalL'auteur Thomas Wouters
Vous pouvez utiliser quelque chose comme ceci:
Ne sais pas comment pythonic il est cependant 🙂
OriginalL'auteur rslite
Bâtiment sur Thomas Wouters et Ricardo Reyes solutions:
OriginalL'auteur Markus Jarderot
ou
puis
OriginalL'auteur A. Coady