Iteravimas per žodynus naudojant 'for' kilpas

Mane šiek tiek glumina šis kodas:

d = {'x': 1, 'y': 2, 'z': 3} 
for key in d:
    print key, 'corresponds to', d[key]

Nesuprantu key dalies. Kaip "Python" atpažįsta, kad iš žodyno reikia perskaityti tik raktą? Ar key yra specialus žodis Pythone? Ar tai tiesiog kintamasis?

Sprendimas

key yra tik kintamojo vardas.

for key in d:

paprasčiausiai peržvelgs žodyno raktus, o ne raktus ir reikšmes. Norėdami peržvelgti ir raktą, ir reikšmę, galite naudoti šiuos veiksmus:

Python 2.x:

for key, value in d.iteritems():

Python 3.x:

for key, value in d.items():

Norėdami išbandyti patys, pakeiskite žodį key į poop.

Python 3.x versijoje iteritems() buvo pakeistas tiesiog items(), kuris grąžina į rinkinį panašų vaizdą, paremtą dict, panašiai kaip iteritems(), bet dar geriau. Ši funkcija taip pat prieinama 2.7 versijoje kaip viewitems().

Operacija items() veiks ir 2, ir 3, tačiau 2 atveju ji grąžins žodyno (key, value) porų sąrašą, kuriame neatsispindės po items() iškvietimo įvykę dict pakeitimai. Jei norite, kad 3.x versijoje būtų elgiamasi kaip 2.x versijoje, galite iškviesti list(d.items()).

Komentarai (10)

Kai iteruojate žodynus naudodami for .. in .. sintaksę, visada iteruojate per raktus (reikšmės pasiekiamos naudojant žodynas[raktas]).

Norėdami iteruoti rakto ir vertės poras, Python 2 programoje naudokite for k,v in s.iteritems(), o Python 3 programoje for k,v in s.items().

Komentarai (1)

Tai labai paplitusi ciklo idioma. in yra operatorius. Apie tai, kada reikia naudoti for key in dict, o kada for key in dict.keys(), žr. David Goodger's Idiomatic Python straipsnį (archyvinė kopija).

Komentarai (1)