Iterare sui dizionari usando i cicli for

Sono un po' perplesso dal seguente codice:

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

Quello che non capisco è la parte "chiave". Come fa Python a riconoscere che ha bisogno solo di leggere la chiave dal dizionario? La chiave è una parola speciale in Python? O è semplicemente una variabile?

Soluzione

key è solo un nome di variabile.

for key in d:

farà semplicemente un loop sulle chiavi del dizionario, piuttosto che sulle chiavi e sui valori. Per fare un loop su entrambe le chiavi e i valori puoi usare il seguente:

Per Python 2.x:

for key, value in d.iteritems():

Per Python 3.x:

for key, value in d.items():

Per testare voi stessi, cambiate la parola key con poop.

Per Python 3.x, iteritems() è stato sostituito con semplicemente items(), che restituisce una vista simile ad un set supportato da un dict, come iteritems() ma anche meglio. Questo è disponibile anche in 2.7 come viewitems().

L'operazione items() funzionerà sia per la 2 che per la 3, ma nella 2 restituirà una lista di coppie (key, value) del dizionario, che non rifletterà i cambiamenti al dict che avvengono dopo la chiamata items(). Se volete il comportamento 2.x in 3.x, potete chiamare list(d.items()).

Commentari (10)

Quando si itera attraverso i dizionari usando la sintassi for .. in .., si itera sempre sulle chiavi (i valori sono accessibili usando dictionary[key]).

Per iterare su coppie chiave-valore, in Python 2 usate for k,v in s.iteritems(), e in Python 3 for k,v in s.items().

Commentari (1)

Questo è un idioma di looping molto comune. in è un operatore. Per quando usare for key in dict e quando deve essere for key in dict.keys() si veda David Goodger'articolo Idiomatic Python (copia archiviata).

Commentari (1)