Quelle serait la meilleure façon de passer de {2:3, 1:89, 4:5, 3:0}
à {1:89, 2:3, 3:0, 4:5}
?
J'ai vérifié quelques posts mais ils utilisent tous l'opérateur "sorted" ; qui retourne des tuples.
Les dictionnaires Python standard ne sont pas ordonnés. Même si vous triiez les paires (clé,valeur), vous ne pourriez pas les stocker dans un dict
d'une manière qui préserverait l'ordre.
Le moyen le plus simple est d'utiliser [OrderedDict
][1], 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)])
Ne vous souciez pas de 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
Pour les utilisateurs de Python 3, il faut utiliser le .items()
au lieu de .iteritems()
:
In [13]: for k, v in od.items(): print(k, v)
....:
1 89
2 3
3 0
4 5
[1] : http://docs.python.org/library/collections.html#collections.OrderedDict
Les dictionnaires eux-mêmes ne comportent pas d'éléments ordonnés en tant que tels, mais si vous souhaitez les imprimer dans un certain ordre, voici quelques exemples :
En Python 2.4 et supérieur :
mydict = {'carl':40,
'alan':2,
'bob':1,
'danny':3}
for key in sorted(mydict):
print "%s: %s" % (key, mydict[key])
donne :
alan: 2
bob: 1
carl: 40
danny: 3
(Python inférieur à 2.4 :).
keylist = mydict.keys()
keylist.sort()
for key in keylist:
print "%s: %s" % (key, mydict[key])
Source : [http://www.saltycrane.com/blog/2007/09/how-to-sort-python-dictionary-by-keys/][1]
[1] : http://www.saltycrane.com/blog/2007/09/how-to-sort-python-dictionary-by-keys/
Comme d'autres l'ont mentionné, les dictionnaires sont par nature non ordonnés. Cependant, si le problème est simplement de afficher les dictionnaires de manière ordonnée, vous pouvez surcharger la méthode __str__
dans une sous-classe de dictionnaire, et utiliser cette classe de dictionnaire plutôt que le dict
intégré. Par exemple.
class SortedDisplayDict(dict):
def __str__(self):
return "{" + ", ".join("%r: %r" % (key, self[key]) for key in sorted(self)) + "}"
>>> d = SortedDisplayDict({2:3, 1:89, 4:5, 3:0})
>>> d
{1: 89, 2: 3, 3: 0, 4: 5}
Notez que cela ne change rien à la façon dont les clés sont stockées, à l'ordre dans lequel elles reviendront lorsque vous itérerez sur elles, etc., mais seulement à la façon dont elles seront affichées avec print
ou sur la console python.