P.23 Dizionari

Python prevede l’utilizzo di dizionari, cioè delle strutture dati in cui inseriamo delle coppie chiave-valore. Un dizionario funziona proprio come l’omonimo oggetto: cerco una parola e ne trovo il significato. Anche la rubrica del telefono è un esempio di “dizionario”: all’interno ci sono dei nominativi in ordine alfabetico con associato un numero di telefono.

Conoscendo il nome da cercare, possiamo ricavare il suo numero di telefono. I dati all’interno di un dizionario in Python non sono in ordine ma sono organizzati con logiche particolari che ne permettono una rapidissima estrazione. Le chiavi devono essere uniche: non posso avere due valori associati ad una stessa chiave.

Creiamo un dizionario utilizzando la seguente scrittura:

listino = {
"mele":12,
"pere":23,
"kiwi":45
}

print(listino)

Le coppiette sono racchiuse tra le due parentesi graffe. La chiave e il suo corrispondente valore sono separati da due puntini. Per la chiave possiamo usare qualsiasi tipo di dato purché sia unica. Ovviamente anche nel campo valore possiamo mettere tutto quello che desideriamo.

Per estrarre un valore, richiamandolo per la sua chiave scriveremo:

print(listino["mele"])

Possiamo estrarre un valore anche usando get():

print(listino.get("mele"))

Per modificare i valori è sufficiente sovrascriverli come facciamo con una comune variabile:

listino["mele"] = 20

Nel caso la chiave non fosse presente non riceveremo un errore, semplicemente inseriremo un nuovo valore con la chiave indicata, quindi per inserire una nuova coppia chiave-valore scriveremo:

print(listino)
listino["fragole"] = 99
print(listino)

Non c’è nessun valore associato a “fragole” nel dizionario e assegnandogli il numero 99 creeremo una nuova coppia.

Per rimuovere una coppia chiave-valore utilizzeremo la chiave e il metodo pop():

print(listino)
listino.pop("fragole")
print(listino)

È previsto anche un metodo popitem() che rimuove l’ultimo elemento inserito. Per evitare ambiguità io consiglierei di usare sempre pop().

In alternativa a pop() si può utilizzare anche del che richiede però una sintassi un po’ anomala:

del listino.["fragole"]

Se avessimo necessità di svuotare completamente il dizionario, utilizziamo:

del listino

oppure:

listino.clear()

Le chiavi nel dizionario possono essere estratte in un sol colpo con keys() che restituisce una lista speciale che può essere elaborata da un ciclo for:

chiavi = listino.keys() 

Possiamo ricavare anche l’elenco non ordinato dei valori:

valori = listino.values() 

oppure anche l’elenco con le coppie chiave-valore, cioè gli elementi del dizionario:

elementi = listino.items() 

Richiamando l’elenco delle chiavi possiamo scorrerle una ad una con un ciclo for:

for k in listino.keys():
    print(k)

Nello stesso modo possiamo scorrere i valori o gli elementi di un dizionario.

Gli elementi più importanti di un dizionario sono le chiavi e quindi possiamo verificare se una certa chiave è presente utilizzando in:

if "mele" in listino:
    print(“mele: ok”)

if "ciliegia" in listino:
    print(“mele: ok”)

Non è possibile copiare un dizionario come se fosse una semplice variabile. Abbiamo creato un dizionario listino e vogliamo crearne una copia chiamata listino2. Potremmo essere tentati di scrivere il seguente codice:

listino2 = listino

In effetti non abbiamo creato due dizionari separati, ma abbiamo solo creato un nuovo “sinonimo”, listato2, che “punta” agli stessi dati di listino.

Per creare una vera copia di un dizionario e quindi copiare tutte le sue coppie chiave-valore dobbiamo chiamare il metodo copy():

listino2 = listino.copy()

Oppure utilizzando:

listino2 = dict(listino)

che crea un nuovo dizionario partendo da quello fornito.