Metodi per i Dizionari in Python
In questa lezione andremo ad approfondire i metodi messi a disposizione dai dizionari in Python.
Vedremo come aggiungere elementi ad un dizionario prendendoli da un altro dizionario attraverso il metodo update
. Vedremo come ottenere il valore di un elemento con il metodo setdefault
. Vedremo come rimuovere un elemento con il metodo pop
e popitem
e come rimuovere tutti gli elementi con il metodo clear
.
Aggiungere elementi ad un Dizionario: metodo update
Nella lezione precedente abbiamo visto come aggiungere un elemento ad un dizionario. Basta specificare una chiave che non è attualmente presente nel dizionario e, in maniera automatica, l'elemento associato viene creato.
Torniamo all'esempio del numero di abitanti delle città italiane:
abitanti = {
"Roma": 2873000,
"Milano": 1356000,
"Napoli": 967000,
"Torino": 882000,
"Palermo": 669000
}
Supponiamo di voler aggiungere la città di Bologna, che ha 380000 abitanti. Normalmente faremmo così:
abitanti["Bologna"] = 380000
In Python esiste anche il meotodo update
per i dizionari che permette di aggiungere più elementi contemporaneamente. Questo metodo accetta come argomento un altro dizionario, che verrà usato per aggiungere elementi al dizionario corrente.
Per cui, volendo aggiungere la città di Bologna possiamo scrivere:
abitanti.update({"Bologna": 380000})
Volendo, possiamo specificare anche altre città con la stessa istruzione. Supponiamo di voler aggiungere anche Firenze, che ha 383000 abitanti, Genova, che ha 585000 abitanti, e Venezia, che ha 270000 abitanti. Possiamo scrivere:
abitanti.update({
"Bologna": 380000,
"Firenze": 383000,
"Genova": 585000,
"Venezia": 270000
})
Se andiamo a stampare il dizionario, vedremo che sono stati aggiunti tutti gli elementi:
print(abitanti)
{'Roma': 2873000, 'Milano': 1356000, 'Napoli': 967000,
'Torino': 882000, 'Palermo': 669000, 'Bologna': 380000,
'Firenze': 383000, 'Genova': 585000, 'Venezia': 270000}
Il metodo update
può essere usato anche per modificare gli elementi esistenti. Infatti, se nel dizionario passato come argomento vi sono delle chiavi che sono già presenti nel dizionario corrente, questi elementi verranno sovrascritti.
Supponiamo di voler modificare il numero di abitanti di Roma, portandolo da 2873000 a 2875000. Possiamo scrivere:
abitanti.update({"Roma": 2875000})
Se andiamo a stampare il dizionario, vedremo che il numero di abitanti di Roma è stato modificato:
print(abitanti)
{'Roma': 2875000, 'Milano': 1356000, 'Napoli': 967000,
'Torino': 882000, 'Palermo': 669000, 'Bologna': 380000,
'Firenze': 383000, 'Genova': 585000, 'Venezia': 270000}
Metodo update
per i Dizionari
Il metodo update
permette di aggiungere o modificare uno o più elementi in un dizionario. L'argomento del metodo è un altro dizionario. Per ogni chiave del dizionario passato come argomento viene verificata l'esistenza nel dizionario corrente. Se la chiave non è presente, viene aggiunto l'elemento associato. Se la chiave è già presente, viene sovrascritto l'elemento associato.
La sintassi è:
dizionario.update(dizionario_argomento)
Metodo update
e iterabili
Il metodo update
in realtà è molto più avanzato di quanto detto sopra. L'argomento di update
può essere, infatti, un qualunque iterabile che possegga certe caratteristiche.
Un iterabile è un oggetto che può essere iterato o scorso. Esempi sono le liste, i dizionari e le tuple.
L'argomento di update
deve essere un iterabile con una caratteristica fondamentale: ogni elemento dell'iterabile deve essere un iterabile a sua volta composto da due elementi. Questi due elementi sono la chiave e il valore da aggiungere o modificare nel dizionario corrente.
Proviamo a chiarire il tutto ritornando all'esempio delle città e dei loro abitanti. Partiamo dal dizionario base:
abitanti = {
"Roma": 2873000,
"Milano": 1356000,
"Napoli": 967000,
"Torino": 882000,
"Palermo": 669000
}
Vogliamo aggiungere le città di Bologna e Firenze. Possiamo costruire una lista di liste formata in questo modo:
citta_da_aggiungere = [
["Bologna", 380000],
["Firenze", 383000]
]
Ora, possiamo aggiungere le città al dizionario con il metodo update
:
abitanti.update(citta_da_aggiungere)
Se andiamo a stampare il dizionario, vedremo che sono state aggiunte le due città:
print(abitanti)
{'Roma': 2873000, 'Milano': 1356000, 'Napoli': 967000,
'Torino': 882000, 'Palermo': 669000, 'Bologna': 380000,
'Firenze': 383000}
La caratteristica dell'oggetto citta_da_aggiungere
è che si tratta di un iterabile i cui elementi sono a loro volta iterabili. Ogni elemento dell'iterabile è una lista di due elementi: la prima è la chiave, la seconda è il valore.
Avremo potuto usare anche una lista di dizionari:
citta_da_aggiungere = [
{"Bologna": 380000},
{"Firenze": 383000}
]
Oppure una lista di tuple:
citta_da_aggiungere = [
("Bologna", 380000),
("Firenze", 383000)
]
Riassumendo:
Argomento del metodo update
L'argomento del metodo update
può essere un iterabile i cui elementi sono a loro volta iterabili. Ogni elemento dell'iterabile deve essere un iterabile a sua volta composto da due elementi: la prima è la chiave, la seconda è il valore.
La struttura dell'argomento può essere sintetizzata schematicamente in questo modo:
[
[chiave1, valore1],
[chiave2, valore2],
[chiave3, valore3],
...
]
Ottenere il valore di un elemento: setdefault
Nella lezione precedente abbiamo visto che esiste il metodo get
che ci permette di ottenere l'elemento di un dizionario data la chiave oppure un valore di default se la chiave non è presente nel dizionario.
I dizionari in Python mettono a disposizione un secondo metodo per ottenere un elemento: setdefault
. Il comportamento di questo metodo è leggermente differente rispetto a get
.
In pratica setdefault
richiede in ingresso due argomenti: la chiave ed un valore di default. Nel caso in cui la chiave esiste, il metodo restituisce il valore associato. Nel caso in cui la chiave non esiste, il metodo aggiunge l'elemento di default al dizionario con quella chiave e lo restituisce.
In poche parole, il metodo get
non modifica il dizionario mentre setdefault
si.
Per comprendere meglio prendiamo un esempio. Supponiamo di avere il seguente dizionario:
dizionario = {
'a': 1,
'b': 2,
'c': 3
}
Se proviamo ad usare il metodo get
per ottenere una chiave inesistente, ad esempio d
, otteniamo:
print(dizionario.get('d', -1))
-1
Il metodo get
restituisce il valore di default -1
ma non modifica la variabile dizionario
. Infatti, se proviamo a stamparla vediamo che è rimasta identica:
print(dizionario)
{'a': 1, 'b': 2, 'c': 3}
Viceversa, se usiamo il metodo setdefault
otteniamo:
print(dizionario.setdefault('d', -1))
-1
E se stampiamo il dizionario vediamo che è stato modificato:
print(dizionario)
{'a': 1, 'b': 2, 'c': 3, 'd': -1}
Metodo setdefault
di un dizionario
Il metodo setdefault
di un dizionario prende in ingresso due argomenti:
- la chiave
- il valore di default
Se la chiave esiste, il metodo restituisce il valore associato. Se la chiave non esiste, il metodo aggiunge l'elemento di default al dizionario con quella chiave e lo restituisce.
dizionario.setdefault(chiave, valore_di_default)
Rimuovere un elemento di un Dizionario: pop
Nella lezione precedente abbiamo usato l'istruzione del
per eliminare un elemento di un dizionario. Tuttavia, con l'istruzione del
non otteniamo il valore dell'elemento rimosso. Per farlo, dovremmo scrivere un codice del genere:
elemento = dizionario[chiave]
del dizionario[chiave]
Possiamo riassumere queste due righe di codice in un'unica istruzione con il metodo pop
. Questo metodo prende in ingresso una chiave, rimuove l'elemento associato e ne restituisce il valore.
Ad esempio, supponiamo di avere il seguente dizionario:
abitanti = {
"Roma": 2873000,
"Milano": 1356000,
"Napoli": 967000,
"Torino": 882000,
"Palermo": 669000
}
Possiamo rimuovere l'elemento associato alla chiave "Roma"
con il metodo pop
:
abitanti_roma = abitanti.pop("Roma")
Se andiamo a stampare il dizionario, vedremo che l'elemento associato alla chiave "Roma"
è stato rimosso:
print(abitanti)
{'Milano': 1356000, 'Napoli': 967000, 'Torino': 882000, 'Palermo': 669000}
Se andiamo a stampare la variabile abitanti_roma
, vedremo che contiene il valore dell'elemento rimosso:
print(abitanti_roma)
2873000
Nel caso in cui la chiave non esista, il metodo pop
solleva un'eccezione di tipo KeyError
. Ad esempio, se provassimo a rimuovere l'elemento associato alla chiave "Genova"
:
abitanti_genova = abitanti.pop("Genova")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'Genova'
In tal caso, possiamo usare il metodo pop
con un secondo argomento, che sarà il valore da restituire nel caso in cui la chiave non esista:
abitanti_genova = abitanti.pop("Genova", 0)
print(abitanti_genova)
0
Metodo pop
di un Dizionario
Il metodo pop
di un dizionario prende in ingresso una chiave e rimuove l'elemento associato. Il metodo restituisce il valore dell'elemento rimosso.
La sintassi è la seguente:
dizionario.pop(chiave)
Nel caso in cui la chiave non esista, il metodo pop
solleva un'eccezione di tipo KeyError
.
Il metodo pop
accetta un secondo argomento opzionale che è il valore da restituire nel caso in cui la chiave non esista.
dizionario.pop(chiave, valore_di_default)
Rimuovere un elemento di un Dizionario: popitem
Esiste un secondo metodo messo a disposizione dai dizionari in Python per rimuovere un elemento: popitem
. Questo metodo non richiede nessun argomento e rimuove un elemento dal dizionario e restituisce una tupla contenente la chiave e il valore dell'elemento rimosso.
Detto questo, il metodo popitem
ha un comportamento che dipende dalla versione di Python utilizzata:
- Python 3.6 e precedenti: il metodo
popitem
rimuove un elemento a caso dal dizionario. - Python 3.7 e successive: il metodo
popitem
rimuove l'ultimo elemento inserito nel dizionario.
Ora, la versione 3.6 di Python è abbastanza vecchia e obsoleta, quindi è raro che possiamo incontrarla in produzione. Tuttavia, è bene ricordare questo dettaglio.
In ogni caso, da ora in poi presupponiamo sempre che stiamo usando Python 3.7 o successive.
Prendiamo un esempio:
dizionario = {
'a': 1,
'b': 2,
'c': 3
}
Possiamo rimuovere l'ultimo elemento inserito, in questo caso c
, con il metodo popitem
:
elemento = dizionario.popitem()
print(elemento)
('c', 3)
Adesso inseriamo un nuovo elemento:
dizionario['d'] = 4
Proviamo a invocare di nuovo il metodo popitem
:
elemento = dizionario.popitem()
print(elemento)
('d', 4)
Come possiamo vedere, il metodo popitem
rimuove sempre l'ultimo elemento inserito nel dizionario.
Nel caso in cui il dizionario sia vuoto e proviamo a invocare il metodo popitem
, il metodo solleverà un'eccezione di tipo KeyError
:
dizionario = {}
elemento = dizionario.popitem()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'popitem(): dictionary is empty'
Metodo popitem
di un Dizionario
Il metodo popitem
rimuove l'ultimo elemento inserito nel dizionario e restituisce una tupla contenente la chiave e il valore dell'elemento rimosso.
Il metodo non richiede nessun argomento e la sua sintassi è la seguente:
dizionario.popitem()
Per le versioni di Python precedenti alla 3.7, il metodo popitem
rimuove un elemento a caso dal dizionario.
Rimuovere tutti gli elementi di un Dizionario: clear
L'ultimo metodo che vedremo in questa lezione è il metodo clear
. Questo metodo permette di rimuovere tutti gli elementi di un dizionario. Questo metodo non prende in ingresso argomenti e non restituisce alcun valore.
Supponiamo di avere il seguente dizionario:
abitanti = {
"Roma": 2873000,
"Milano": 1356000,
"Napoli": 967000,
"Torino": 882000,
"Palermo": 669000
}
Possiamo rimuovere tutti gli elementi del dizionario con il metodo clear
:
abitanti.clear()
Se andiamo a stampare il dizionario, vedremo che è vuoto:
print(abitanti)
{}
Metodo clear
per i Dizionari
Il metodo clear
permette di rimuovere tutti gli elementi di un dizionario. Questo metodo non prende in ingresso argomenti e non restituisce alcun valore.
La sintassi è:
dizionario.clear()
In Sintesi
In questa lezione abbiamo studiato i principali metodi che un dizionario mette a disposizione in Python. Attraverso di essi è possibile effettuare operazioni molto più specifiche rispetto alle operazioni viste nella lezione precedente.
- Abbiamo visto che usando il metodo
update
è possibile inserire o modificare uno o più elementi di un dizionario in una modalità bulk, ossia attraverso un'unica istruzione; - Abbiamo visto che usando il metodo
setdefault
è possibile ottenere il valore di un elemento di un dizionario e, nel caso in cui la chiave non esista, aggiungere un elemento con quella chiave; - Abbiamo visto che usando il metodo
pop
è possibile rimuovere un elemento di un dizionario e ottenere il valore di quell'elemento; - Abbiamo visto che usando il metodo
popitem
è possibile rimuovere l'ultimo elemento inserito in un dizionario e ottenere il valore di quell'elemento; - Infine, abbiamo visto che usando il metodo
clear
è possibile rimuovere tutti gli elementi di un dizionario.
Questi metodi aggiungono nuovi modi di lavorare con i dizionari che possono tornare utili in determinate situazioni.