Un Tri Personnalisé Python Dictionnaire
J'ai donc un dictionnaire qui ressemble à ça quand je l'imprimer:
{'10': -10, 'ZT21': 14, 'WX21': 12, '2': 15, '5': -3, 'UM': -25}
Je veux trier ces d'une manière personnalisée, qui-je définir. Disons que la façon dont je veux être triée (par clé) ZT21
, 10
, WX21
, UM
, 5
, 2
.
Ce que quelqu'un sait comment faire pour aller sur le tri d'un dictionnaire dans une prédéfinis/manière personnalisée? Ce que je fais est l'obtention de ce dictionnaire à partir d'une base de données, et il peut sortir avec plus de 20 touches, qui ont toutes un ordre spécifique. L'ordre est toujours ensemble, mais parfois, certaines clés/valeurs ne serait pas dans le dictionnaire. Donc, cela pourrait se produire trop:
{'ZT21': 14, 'WX21': 12, '2': 15, '5': -3, 'UM': -25}
triée (par clé) ZT21
, 10
, WX21
, UM
, 5
, 2
.
De sorte que le 10 n'est pas là, à cet exemple, mais le tri j'ai besoin est toujours le même, le 10 serait tout simplement absent.
Des idées?
OriginalL'auteur user1610719 | 2012-08-20
Vous devez vous connecter pour publier un commentaire.
Dictionnaires en Python sont non-ordonnée. Vous pouvez obtenir les résultats dont vous avez besoin comme un
list
ou comme un OrderedDict
Si vous faites beaucoup de ces derniers, il sera plus efficace d'utiliser un
dict
pour la keyorderFonctionnait très bien, merci!!
OriginalL'auteur John La Rooy
Vous ne pouvez pas. Utiliser un
collections.OrderedDict
à la place.OriginalL'auteur Ignacio Vazquez-Abrams
Dictionnaires sont intrinsèquement non-ordonnée, de sorte que vous ne pouvez pas trier le dictionnaire. Vous pouvez trier les paires clé/valeur par le tri
someDict.items()
et en le passant dans une fonction essentielle, tout comme vous le feriez lors d'un tri de rien d'autre, mais vous obtiendrez une liste triée et pas un dictionnaire. Voir les questions précédentes sur le tri du dictionnaire: Python: le tri d'un dictionnaire de listes et Dictionnaire de tri par longueur de clé par exemple.OriginalL'auteur BrenBarn
Vous pouvez les trier à l'aide de OrderedDict et en précisant votre commande Personnalisé.
customsort() trie donné dictionnaire(dict1), par ordonnance(key_order) transmis par l'utilisateur.
Il va vérifier si la clé est dans dict1 si elle est là, puis de mettre en valeur spécifiée dans dict1 d'autre mettre la valeur 0.
OriginalL'auteur Nikita Maru
J'ai eu exactement le même problème et ont conçu une légère solution générale:
D'abord, vous créez une instance d'une commande personnalisé fonction de tri:
Maintenant, le tri:
Les touches manquantes sont rejetées à la fin dans un ordre non spécifié. Notez que cette fermeture est récursive. Comme indiqué par la double crochets, vous pouvez spécifier autant d'ordres de tri que les différents dictionnaires imbriqués dans votre structure.
Projet sur GitHub: https://github.com/laowantong/customsort
Aussi loin que je me souvienne, c'est une liste de la liste des clés triés que le client veut être triée dans un sous-dictionnaire adopté plus tard, à
custom_sort
.OriginalL'auteur Aristide