Estou um pouco perplexo com o seguinte código:
d = {'x': 1, 'y': 2, 'z': 3}
for key in d:
print key, 'corresponds to', d[key]
O que eu não entendo'não entendo é a parte "chave". Como o Python reconhece que só precisa ler a chave do dicionário? A palavra "chave" é uma palavra especial em Python? Ou é simplesmente uma variável?
"chave" é apenas um nome variável.
for key in d:
irá simplesmente passar por cima das chaves do dicionário, em vez das chaves e valores. Para fazer um loop sobre ambas as chaves e valores, você pode usar o seguinte:
Para Python 2.x:
for key, value in d.iteritems():
Para Python 3.x:
for key, value in d.items():
Para testar por si mesmo, mude a palavra "chave" para "cocó".
Para Python 3.x, iteritems()
foi substituído por simplesmente items()
, o que retorna uma visão parecida com um conjunto apoiado pela ditadura, como iteritems()
mas ainda melhor.
Isto também está disponível em 2.7 como viewitems()
.
A operação items()
irá funcionar tanto para 2 como para 3, mas em 2 irá retornar uma lista dos pares do dicionário (chave, valor)
, que não irá refletir mudanças na dita que acontece após a chamada items()
. Se você quiser o comportamento 2.x em 3.x, você pode chamar list(d.items())
.
Quando você itera através de dicionários utilizando o for ... in ..
-syntax, ele sempre itera sobre as chaves (os valores são acessíveis utilizando dictionary[key]
).
Para iterar sobre pares de valores chave, em Python 2 utilize para k,v em s.iteritems()
, e em Python 3 para k,v em s.items()
.
Este é um idioma de looping muito comum. "in" é um operador. Para quando utilizar para chave em dict
e quando deve ser para chave em dict.keys()
veja artigo Idiomático Python de David Goodger (cópia arquivada).