Jestem trochę zdziwiony następującym kodem:
d = {'x': 1, 'y': 2, 'z': 3}
for key in d:
print key, 'corresponds to', d[key]
To, czego nie rozumiem, to część key
. W jaki sposób Python rozpoznaje, że musi tylko odczytać klucz ze słownika? Czy klucz
jest jakimś specjalnym słowem w Pythonie? Czy też jest to po prostu zmienna?
key
jest po prostu nazwą zmiennej.
for key in d:
po prostu zapętli się nad kluczami w słowniku, a nie nad kluczami i wartościami. Aby zapętlić zarówno klucz, jak i wartość, możesz użyć następującego polecenia:
Dla Pythona 2.x:
for key, value in d.iteritems():
Dla Python 3.x:
for key, value in d.items():
Aby przetestować dla siebie, zmień słowo klucz
na poop
.
W Pythonie 3.x, iteritems()
zostało zastąpione po prostu items()
, które zwraca widok podobny do zestawu, wsparty przez dict, tak jak iteritems()
, ale jeszcze lepiej.
Jest to również dostępne w 2.7 jako viewitems()
.
Operacja items()
będzie działać zarówno dla 2 jak i 3, ale w 2 zwróci listę par słownika'(klucz, wartość)
, która nie będzie odzwierciedlać zmian w dict, które nastąpiły po wywołaniu items()
. Jeśli chcesz uzyskać zachowanie 2.x w 3.x, możesz wywołać list(d.items())
.
Kiedy iterujesz po słownikach używając składni for .. in ..
, zawsze iteruje po kluczach (wartości są dostępne przy użyciu słownik[klucz]
).
Aby iterować po parach klucz-wartość, w Pythonie 2 użyj for k,v in s.iteritems()
, a w Pythonie 3 for k,v in s.items()
.
Jest to bardzo powszechny idiom pętli. in
jest operatorem. O tym kiedy używać for key in dict
i kiedy musi być for key in dict.keys()
zobacz David Goodger's Idiomatic Python article (archiwalna kopia).