Ik ben een beetje verbaasd over de volgende code:
d = {'x': 1, 'y': 2, 'z': 3}
for key in d:
print key, 'corresponds to', d[key]
Wat ik niet begrijp is het key
gedeelte. Hoe herkent Python dat het alleen de sleutel uit het woordenboek hoeft te lezen? Is key
een speciaal woord in Python? Of is het gewoon een variabele?
key
is gewoon een variabele naam.
for key in d:
zal gewoon lus over de sleutels in het woordenboek, in plaats van de sleutels en waarden. Om zowel de sleutel als de waarde te doorlopen, kunt u het volgende gebruiken:
Voor Python 2.x:
for key, value in d.iteritems():
Voor Python 3.x:
for key, value in d.items():
Om zelf te testen, verander het woord key
in poop
.
Voor Python 3.x, is iteritems()
vervangen door simpelweg items()
, wat een set-achtige view teruggeeft, ondersteund door de dict, net als iteritems()
maar dan nog beter.
Dit is ook beschikbaar in 2.7 als viewitems()
.
De bewerking items()
werkt zowel in 2 als in 3, maar in 2 geeft het een lijst van de (key, value)
paren van het woordenboek terug, die geen veranderingen in het dictee weergeeft die na de items()
oproep plaatsvinden. Als je het 2.x gedrag in 3.x wilt, kun je list(d.items())
aanroepen.
Wanneer je door woordenboeken heenloopt met de for .. in ..
-syntaxis, gaat het altijd over de sleutels (de waarden zijn toegankelijk met dictionary[key]
).
Om te itereren over sleutel-waarde paren, gebruik je in Python 2 for k,v in s.iteritems()
, en in Python 3 for k,v in s.items()
.
Dit is een veel voorkomend looping idioom. in
is een operator. Voor wanneer je for key in dict
moet gebruiken en wanneer het for key in dict.keys()
moet zijn, zie David Goodger's Idiomatic Python artikel (gearchiveerde kopie).