Le viste del dizionario sono essenzialmente ciò che dice il loro nome: le viste sono semplicemente come una finestra sulle chiavi e valori (o elementi) di un dizionario. Ecco un estratto dal official documentation per Python 3:
>>> dishes = {'eggs': 2, 'sausage': 1, 'bacon': 1, 'spam': 500}
>>> keys = dishes.keys()
>>> values = dishes.values()
>>> # view objects are dynamic and reflect dict changes
>>> del dishes['eggs']
>>> keys # No eggs anymore!
dict_keys(['sausage', 'bacon', 'spam'])
>>> values # No eggs value (2) anymore!
dict_values([1, 1, 500])
(L'equivalente Python 2 utilizza dishes.viewkeys()
e dishes.viewvalues()
.)
Questo esempio illustra il carattere dinamico di visite: visualizzare le chiavi non è una copia delle chiavi in un dato momento, ma piuttosto una semplice finestra che mostra le chiavi; se sono cambiati, anche quello che vedi attraverso la finestra cambia pure. Questa funzione può essere utile in alcune circostanze (ad esempio, si può lavorare con una vista sui tasti in più parti di un programma invece di ricalcolare l'elenco corrente di chiavi ogni volta che sono necessarie).
Un vantaggio è che guardando a, diciamo, i tasti utilizza solo una piccola e fissa quantità di memoria e richiede una piccola e fissato tempo di elaborazione, in quanto non v'è alcuna creazione di un elenco di keys (Python 2, d'altra parte, crea spesso inutilmente una nuova lista, come citato da Rajendran T, che prende memoria e tempo in un ammontare proporzionale alla lunghezza della lista). Per continuare l'analogia con le finestre, se vuoi vedere un paesaggio dietro un muro, fai semplicemente un'apertura (costruisci una finestra); copiare le chiavi in una lista equivarrebbe a dipingere invece una copia del paesaggio sul muro: la copia richiede tempo, spazio e non si aggiorna automaticamente.
Per riassumere, le viste sono semplicemente ... viste (finestre) sul dizionario, che mostrano il contenuto del dizionario anche dopo la modifica. Offrono funzionalità che differiscono da quelle degli elenchi: un elenco di chiavi contiene una copia delle chiavi del dizionario in un determinato momento, mentre una vista è dinamica ed è molto più veloce da ottenere, poiché non deve copiare alcun dati (chiavi o valori) per essere creati.
+1. Ok, in cosa differisce dall'avere accesso diretto alla lista interna delle chiavi? È più veloce, più lento? Più memoria efficiente? Limitato? Se puoi leggerlo e modificarlo, sembra esattamente come avere un riferimento a questo elenco. –
Grazie. Il fatto è che le viste * sono * il tuo accesso a "la lista interna delle chiavi" (nota che questa "lista di chiavi" non è una lista Python, però, ma è proprio una vista). Le viste hanno una memoria più efficiente rispetto agli elenchi di chiavi (o valori o elementi) di Python 2, poiché non copiano nulla; sono in effetti come "un riferimento alla lista delle chiavi" (si noti anche che "un riferimento ad una lista" in realtà è semplicemente chiamato una lista, in Python, dato che le liste sono oggetti mutabili). Si noti inoltre che non è possibile modificare direttamente le viste: al contrario, si modifica ancora il dizionario e le viste riflettono immediatamente le modifiche. – EOL
Ok, non sono ancora chiaro sull'implementazione, ma è la risposta migliore finora. –