407 votes

Dictionnaire de Python, garder des clés/valeurs dans le même ordre qu’a déclaré

Python et avait une question à propos des dictionnaires. J'ai un dictionnaire que j'ai déclaré dans un ordre particulier et vous souhaitez le laisser dans cet ordre tout le temps. Les clés/valeurs ne peuvent pas vraiment être gardé dans l'ordre selon leur valeur, je veux juste, dans l'ordre que je l'ai déclaré.

Donc, si j'ai le dictionnaire:

d = {'ac':33, 'gw':20, 'ap':102, 'za':321, 'bs':10}

Il n'est pas dans l'ordre, si je considère qu'il est ou itérer dessus, est-il un moyen de vérifier que Python va garder l'ordre explicite que j'ai déclaré les clés/valeurs dans?

À L'Aide De Python 2.6

182voto

eumiro Points 56644
<pre><code></code><p><pre><code></code></pre><p><code></code>(ou tout autre objet immuable), vous pouvez également utiliser :</p><pre><code></code></pre></pre>

42voto

mgilson Points 92954

dictionnaires de Python ne sont pas ordonnés. Si vous voulez un dictionnaire trié, essayez collections. OrderedDict.

Notez que OrderedDict a été introduit dans la bibliothèque standard de python 2.7. Si vous avez une ancienne version de python, vous pouvez trouver des recettes pour les dictionnaires ordonnés sur ActiveState.

12voto

Fire Lancer Points 8934

Les dictionnaires utiliseront une ordonnance qui rend la recherche efficace, et vous ne pouvez pas changer cela,

Vous pouviez utiliser une liste d’objets (un 2 éléments tuple dans un cas simple, ou même une classe) et ajouter des éléments à la fin. Vous pouvez ensuite utiliser la recherche linéaire pour trouver des objets dedans.

Sinon, vous pourriez créer ou utiliser une structure de données créée dans le but de maintenir l’ordre.

2voto

Evan Byrne Points 184

J’ai eu un problème similaire lors de l’élaboration d’un projet de Django. Je ne pouvais pas utiliser OrderedDict, parce que je courais une ancienne version de python, donc la solution simple est d’utiliser la classe SortedDict de Django :

https://code.djangoproject.com/wiki/SortedDict

1voto

Rasmus Kaj Points 2102

En général, vous pouvez créer une classe qui se comporte comme un dictionnaire, principalement en œuvre les méthodes , , , et plus. Cette classe peut avoir n’importe quel comportement que vous aimez, par exemple prividing un itérateur trié les clefs...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X