Iterando sobre dicionários usando 'for' loops

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?

Solução

"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()).

Comentários (10)

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().

Comentários (1)

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).

Comentários (1)