J'ai un dictionnaire en Python qui ressemble à ceci:
D = {1:'a', 5:'b', 2:'a', 7:'a'}
Les valeurs des clés ne sont généralement pas pertinentes. Existe-t-il un moyen de parcourir le dictionnaire à l'aide de touches dans l'ordre numérique? Les clés sont toutes des entiers.
Au lieu de dire
for key in D:
# some code...
Puis-je parcourir les touches du dictionnaire dans l'ordre 1, 2, 5, 7
?
De plus, je ne peux pas utiliser les fonctions de tri/tri.
Vous pouvez utiliser ceci:
for key in sorted(D.iterkeys()):
.. code ..
Dans Python 3.x, utilisez D.keys()
(qui est identique à D.iterkeys()
dans Python 2.x ).
En tenant compte de votre stipulation que vous ne souhaitez pas trier et en supposant que les clés sont toutes des entiers, vous pouvez simplement trouver les valeurs maximale et minimale des clés, puis parcourir cette plage et vérifier si chacune est réellement dans le dictionnaire.
for key in xrange(min(D), max(D) + 1):
if key in D:
print D[key]
Ce n'est pas très efficace, bien sûr, mais cela va fonctionner, et cela évite le tri.
En supposant que les clés/valeurs sont insérées dans l'ordre, vous pouvez utiliser un OrderedDict :
>>> from collections import OrderedDict
>>> d = OrderedDict()
>>> d[1] = 'a'
>>> d[2] = 'a'
>>> d[5] = 'b'
>>> d[7] = 'a'
>>> d
OrderedDict([(1, 'a'), (2, 'a'), (5, 'b'), (7, 'a')])
>>> d.keys()
[1, 2, 5, 7]
Vous pouvez obtenir la liste des clés à l'aide de dict.keys()
, puis parcourir une vue triée de la liste:
for key in sorted(D.keys()):
print key, D[key]