Le code suivant me laisse un peu perplexe :
d = {'x': 1, 'y': 2, 'z': 3}
for key in d:
print key, 'corresponds to', d[key]
Ce que je ne comprends pas, c'est la partie key
. Comment Python reconnaît-il qu'il n'a besoin que de lire la clé du dictionnaire ? Est-ce que key
est un mot spécial en Python ? Ou est-ce simplement une variable ?
key
est juste un nom de variable.
for key in d:
va simplement boucler sur les clés du dictionnaire, plutôt que sur les clés et les valeurs. Pour boucler à la fois sur la clé et la valeur, vous pouvez utiliser ce qui suit :
Pour Python 2.x :
for key, value in d.iteritems():
Pour Python 3.x :
for key, value in d.items():
Pour tester par vous-même, remplacez le mot key
par poop
.
Pour Python 3.x, iteritems()
a été remplacé par simplement items()
, qui retourne une vue de type ensemble soutenue par le dict, comme iteritems()
mais encore mieux.
Ceci est également disponible en 2.7 sous la forme de viewitems()
.
L'opération items()
fonctionnera à la fois pour 2 et 3, mais en 2, elle retournera une liste des paires (key, value)
du dictionnaire, qui ne reflètera pas les changements du dict qui se produisent après l'appel items()
. Si vous voulez le comportement de 2.x en 3.x, vous pouvez appeler list(d.items())
.
Lorsque vous itérez dans les dictionnaires en utilisant la syntaxe for .. in ..
, vous itérez toujours sur les clés (les valeurs sont accessibles en utilisant dictionary[key]
).
Pour itérer sur des paires clé-valeur, utilisez en Python 2 for k,v in s.iteritems()
, et en Python 3 for k,v in s.items()
.
C'est un idiome de bouclage très commun. in
est un opérateur. Pour savoir quand utiliser for key in dict
et quand il faut utiliser for key in dict.keys()
, voir l'article de David Goodger's Idiomatic Python (copie archivée)][1].