Малко съм озадачен от следния код:
d = {'x': 1, 'y': 2, 'z': 3}
for key in d:
print key, 'corresponds to', d[key]
Това, което не разбирам, е частта key
. Как Python разпознава, че трябва да прочете само ключа от речника? Специална дума ли е ключ
в Python? Или това е просто променлива?
key
е просто име на променлива.
for key in d:
просто ще премине през ключовете в речника, а не през ключовете и стойностите. За да направите цикъл и над ключа, и над стойността, можете да използвате следното:
За Python 2.x:
for key, value in d.iteritems():
За Python 3.x:
for key, value in d.items():
За да проверите сами, променете думата key
на poop
.
За Python 3.x, iteritems()
е заменено с просто items()
, което връща изглед, подобен на набор, подкрепен от dict, подобно на iteritems()
, но още по-добре.
Това е налично и в 2.7 като viewitems()
.
Операцията items()
ще работи както за 2, така и за 3, но в 2 тя ще връща списък от двойките (key, value)
на речника, който няма да отразява промените в дикта, настъпили след извикването на items()
. Ако искате поведението от 2.x в 3.x, можете да извикате list(d.items())
.
Когато итерирате през речници с помощта на синтаксиса for .. in ..
, винаги се итерира през ключовете (стойностите са достъпни с помощта на dictionary[key]
).
За да итерирате над двойки ключ-стойност, в Python 2 използвайте for k,v in s.iteritems()
, а в Python 3 for k,v in s.items()
.
Това е много често срещан идиом за зацикляне. in
е оператор. За това кога се използва for key in dict
и кога трябва да се използва for key in dict.keys()
вижте David Goodger's Idiomatic Python article (archived copy).