Stampa  |  Nascondi immagini  |  Mostra immagini

Dizionari


Un dizionario rappresenta una collezione "non ordinata" di oggetti.
Gli oggetti sono identificati univocamente da una chiave (generalmente una stringa) invece che mediante un indice numerico, come avviene nelle liste.
Ogni elemento del dizionario è rappresentato da una coppia (chiave : valore), la chiave serve per accedere all'elemento e recuperare il valore.
Esattamente ciò che avviene quando si cerca una parola sul vocabolario, in tal caso il valore che si cerca è una frase che spiega il significato della chiave.

In analogia alle liste, anche per i dizionari python lascia la possibilità di inserire oggetti eterogenei nella stesso dizionario.

Di seguito elenco una serie di esempi che illustrano le caratteristiche dei dizionari e gli operatori ad essi associati. Questa volta voglio utilizzare un esempio più reale, quindi costruisco un dizionario che associa ad ogni nome di persona il voto preso in un ipotetico esame universitario di python.

è possibile conoscere il numero di elementi di un dizionario mediante la funzione len(x):

>>> diz1 = {'stefano':23,'elena':19,'enrico':25,'simone':30}
# poteva andare meglio !

>>> len(diz1)
4

Esiste un elemento particolare che rappresenta il dizionario vuoto ({}):

>>> diz2 = {}
>>> len(diz2)
0

è possibile controllare l'esistenza di una chiave nel dizionario mediante la funzione has_key(x). Il risultato di tale funzione è booleano (1=vero, 0=falso).

>>> diz1.has_key('stefano')
1
>>> diz1.has_key('luca')
0

Come si evince dall'esempio, Stefano ha partecipato all'esame, mentre Luca no.

Esistono due metodi che permettono di estrarre dal dizionario la lista delle chiavi e la lista dei valori (rispettivamente keys() e values()):

>>> diz1.keys()
['stefano','elena','enrico','simone']
>>> diz1.values()
[23,19,25,30]

Il metodo keys può essere molto utile per elencare in ordine alfabetico i partecipanti all'esame:

>>> k = diz1.keys()
>>> k.sort()
>>> k
['elena','enrico','simone','stefano']

Inserire un nuovo elemento nel dizionario è molto semplice, si effettua un assegnamento:

>>> diz1['pierino'] = 18
>>> diz1
{'stefano':23,'elena':19,'enrico':25,'simone':30,'pierino':18}

Infine per cancellare il più secchione della classe:

>>> del diz1['simone']
>>> diz1
{'stefano':23,'elena':19,'enrico':25,'pierino':18}

Secondo me questa struttura rappresenta il migliore strumento di python. I dizionari sono semplici da utilizzare, efficienti e molto flessibili, soprattutto sono utili per chi gestisce dati in strutture relazionali. Infatti combinando opportunamente liste e dizionari è possibile creare un vero e proprio database relazionale.
Per fare un esempio si potrebbe creare il database dei voti universitari nel seguente modo:

>>>> db = []
>>>> db.append({'esame':'guida a python','nome':'stefano','voto':23})
>>>> db.append({'esame':'guida a python','nome':'elena','voto':19})
>>>> db.append({'esame':'progr. ad oggetti','nome':'stefano','voto':28})
>>>> db.append({'esame':'guida a python','nome':'enrico','voto':18})

Questa è una tabella di 4 record composti da 3 campi ognuno. I 3 campi sono stati chiamati rispettivamente esame, nome e voto. Ogni record è rappresentato da un elemento della lista "db", la quale rappresenta l'intero database.

Internamente i dizionari sono implementati mediante una tabella hash, quindi l'individuazione di un elemento in base alla chiave è estremamente veloce.

Dopo anni di lavoro con diversi linguaggi di programmazione, io ho maturato la convinzione di non poter fare a meno di una struttura dati come i dizionari. Io ho lavorato diversi anni con Microsoft Visual C++, con la libreria ad oggetti MFC (Microsoft Foundation class), e di conseguenza ho spesso utilizzato le mappe. Le mappe di MFC sono identiche ai dizionari di python, ma essendo implementate come libreria esterna al linguaggio sono incredibilmente lente e macchinose.
In questo caso, essendo i dizionari gia' integrati nell'interprete, Python riesce a fornire uno strumento leggero e potentissimo.



Versione originale: http://programmazione.html.it/guide/lezione/1293/dizionari/

© 1997-2006 HTML.it
La vendita, il noleggio, il prestito e la diffusione del contenuto di questa pagina sono vietate, tranne nei casi specificati nella pagina http://www.html.it/info/note-legali.php