Les dictionnaires Python standard ne sont pas ordonnés (jusqu'à Python 3.7). Même si vous triiez les paires (clé,valeur), vous ne pourriez pas les stocker dans un fichier de type dict
de manière à préserver l'ordre.
Le moyen le plus simple est d'utiliser OrderedDict
qui se souvient de l'ordre dans lequel les éléments ont été insérés :
In [1]: import collections
In [2]: d = {2:3, 1:89, 4:5, 3:0}
In [3]: od = collections.OrderedDict(sorted(d.items()))
In [4]: od
Out[4]: OrderedDict([(1, 89), (2, 3), (3, 0), (4, 5)])
Peu importe la façon dont od
est imprimé ; cela fonctionnera comme prévu :
In [11]: od[1]
Out[11]: 89
In [12]: od[3]
Out[12]: 0
In [13]: for k, v in od.iteritems(): print k, v
....:
1 89
2 3
3 0
4 5
Python 3
Pour les utilisateurs de Python 3, il faut utiliser la fonction .items()
au lieu de .iteritems()
:
In [13]: for k, v in od.items(): print(k, v)
....:
1 89
2 3
3 0
4 5
6 votes
@KarlKnechtel - mon cas d'utilisation est que j'ai une application CLI qui a un menu primitif et les options du menu sont dans un dictionnaire comme les clés. J'aimerais afficher les clés par ordre alphabétique pour la sécurité de l'utilisateur.
1 votes
Duplicata possible de Dictionnaire en python avec l'ordre que j'ai défini au départ
1 votes
@Rinzler : Je suis d'accord. De plus, alors que les deux questions invitent à la confusion en demandant l'ordre d'un dictionnaire plutôt que l'ordre d'accès à son contenu, je pense que celle à laquelle vous faites référence est moins susceptible de causer réellement une confusion, car il est clair que ce que le questionneur veut vraiment, et qui a des cas d'utilisation valables.
2 votes
@RyanHaining "les dictionnaires ne sont pas triés" - pas universellement vrai. Par exemple, Java a
TreeMap
qui se comporte exactement comme le souhaite le PO2 votes
@Nayuki, étant donné qu'il s'agit d'une question sur Python, j'assimilais dictionnaire à
dict
12 votes
Notez que les dicts sont maintenant ordonnés par ordre d'insertion (python 3.6+). Certaines réponses ci-dessous le soulignent.
0 votes
Lorsqu'on utilise un dictionnaire pour construire un histogramme, le tracé de cet histogramme est une bonne raison de trier le dict par clés.
3 votes
@matiasg note que dans Python 3.6, les dicts préservant l'ordre d'insertion sont un détail d'implémentation de CPython. C'est avec Python 3.7 que la préservation de l'ordre d'insertion des dicts fait officiellement partie du langage.
0 votes
Keep = {2:3, 1:89, 4:5, 3:0} then dict(sorted(keep.items()))