Je suis un peu perplexe par le code suivant :
Ce que je ne comprends pas est la « clé ». Comment Python reconnaît qu’il a besoin seulement de lire la clé du dictionnaire ? Est « clé » un mot spécial en Python ? Ou est-ce simplement une variable ?
Je suis un peu perplexe par le code suivant :
Ce que je ne comprends pas est la « clé ». Comment Python reconnaît qu’il a besoin seulement de lire la clé du dictionnaire ? Est « clé » un mot spécial en Python ? Ou est-ce simplement une variable ?
la clé est juste un nom de variable.
for key in d:
sera tout simplement une boucle sur les touches dans le dictionnaire, plutôt que les clés et les valeurs. En boucle à la fois la clé et la valeur que vous pouvez utiliser for key, value in d.iteritems():
Test pour vous-même, de changer le mot key
de poop
MODIFIER
Pour Python 3.x, iteritems()
a été remplacé par simplement items()
, qui renvoie un ensemble de vue soutenu par le dict, comme iteritems()
, mais même les meilleurs. Ce service est également disponible dans 2,7 comme viewitems()
. L'opération items()
fonctionne pour les 2 et 3, mais dans le 2 il sera de retour une liste du dictionnaire de l' (key, value)
des paires, qui ne sera pas refléter les changements apportés à la dict que se passera après l' items()
appel. Si vous souhaitez que le 2.x comportement en 3.x, vous pouvez appeler list(d.items())
.
Ce n'est pas que la clé est un mot spécial, mais que les dictionnaires de mettre en œuvre l'itérateur protocole. Vous pouvez le faire dans votre classe, voir, par exemple, cette question de la façon de construire la classe des itérateurs.
Dans le cas de dictionnaires, il est mis en œuvre au niveau C. Les détails sont disponibles dans la PPE 234. En particulier, la section intitulée "Dictionnaire des Itérateurs":
Les dictionnaires de mettre en œuvre un tp_iter fente qui renvoie un efficace itérateur qui effectue une itération sur les clés du dictionnaire. [...] Ce signifie que nous pouvons écrire
for k in dict: ...
ce qui est équivalent, mais beaucoup plus rapide que
for k in dict.keys(): ...
aussi longtemps que la restriction sur les modifications du dictionnaire (soit par la boucle ou par un autre thread) ne sont pas violés.
Ajouter des méthodes à des dictionnaires qui retournent des différents types de les itérateurs de manière explicite:
for key in dict.iterkeys(): ... for value in dict.itervalues(): ... for key, value in dict.iteritems(): ...
Cela signifie qu'
for x in dict
est une abréviation de"for x in dict.iterkeys()
.
comme d'autres l'ont souligné, une itération sur un dict
parcourt-il les clés dans aucun ordre particulier.
Comme vous pouvez le voir ici
>>> d = {'x': 1, 'y': 2, 'z': 3}
>>> list(d)
['y', 'x', 'z']
>>> d.keys()
['y', 'x', 'z']
Pour votre exemple, il est préférable de l'utiliser dict.items()
>>> d.items()
[('y', 2), ('x', 1), ('z', 3)]
Cela vous donne une liste de tuples. Lorsque vous passez en boucle sur eux comme ça, chaque tuple est déballé en k
et v
automatiquement
for k,v in d.items():
print k, 'corresponds to', v
À l'aide de k
et v
comme noms de variable lorsqu'une boucle sur un dict
est assez courant, si le corps de la boucle n'est qu'à quelques lignes. Pour plus compliquée boucles, il peut être une bonne idée d'utiliser des noms plus descriptifs
for letter, number in d.items():
print letter, 'corresponds to', number
C'est une bonne idée d'aller de l'avant pour entrer dans l'habitude de l'utilisation de chaînes de format
for letter, number in d.items():
print '{0} corresponds to {1}'.format(letter, number)
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.