Questa sezione spiega come aggiungere nuovi elementi ad un dizionario (oggetto di tipo dict) o aggiornare il valore di un elemento esistente in Python. È anche possibile concatenare (unire, fondere) più dizionari.
- Aggiungere e aggiornare elementi al dizionario specificando le chiavi.
- Concatenazione (fusione) di più dizionari: update(),| operator,|= operator
- Aggiungere o aggiornare elementi multipli: update(),|= operatore
Aggiungere e aggiornare elementi al dizionario specificando le chiavi.
Si possono aggiungere elementi del dizionario nel modo seguente.
Oggetto dizionario [chiave] = valore
Quando viene specificata una chiave inesistente, viene aggiunto un nuovo elemento, e quando viene specificata una chiave esistente, il valore esistente viene aggiornato (sovrascritto).
d = {'k1': 1, 'k2': 2}
d['k3'] = 3
print(d)
# {'k1': 1, 'k2': 2, 'k3': 3}
d['k1'] = 100
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3}
Se non volete aggiornare il valore di una chiave che esiste, usate il metodo setdefault().
Concatenare (unire) più dizionari: update(), | operator, |= operator
aggiornamento()
Se un altro oggetto dizionario è specificato come argomento al metodo update() dell'oggetto dizionario, tutti i suoi elementi saranno aggiunti.
Se la chiave si sovrappone a una chiave esistente, questa sarà sovrascritta con il valore del dizionario specificato nell'argomento.
d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}
d1.update(d2)
print(d1)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
È un errore specificare più dizionari nell'argomento di update().
d1 = {'k1': 1, 'k2': 2}
d2 = {'k3': 3, 'k4': 4}
d3 = {'k5': 5, 'k6': 6}
# d1.update(d2, d3)
# TypeError: update expected at most 1 arguments, got 2
Come spiegato più avanti, update() può aggiungere nuovi elementi come argomenti di parole chiave (key=value), quindi basta aggiungere ** al dizionario ed espandere ogni elemento come argomento di parola chiave e passarlo.
d1.update(**d2, **d3)
print(d1)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}
Come negli esempi precedenti, usando update() si aggiornerà l'oggetto dizionario originale.
Se volete generare un nuovo dizionario unendo più dizionari, usate {**d1, **d2} (da Python 3.5) o dict(**d1, **d2).
In Python 3.9 e successivi, è anche possibile creare un nuovo dizionario usando l'operatore| descritto in seguito.
operatore |, operatore |= (Python 3.9 e successivi)
A partire da Python 3.9, è possibile unire due dizionari usando l'operatore |. Quando due dizionari hanno la stessa chiave, il valore a destra ha la priorità.
d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}
print(d1 | d2)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
print(d2 | d1)
# {'k1': 1, 'k3': 3, 'k4': 4, 'k2': 2}
|È anche possibile combinare più dizionari usando una serie di operatori.
d1 = {'k1': 1, 'k2': 2}
d2 = {'k3': 3, 'k4': 4}
d3 = {'k5': 5, 'k6': 6}
print(d1 | d2 | d3)
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}
+Come con update(), l'oggetto sul lato sinistro viene aggiornato.
d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}
d1 |= d2
print(d1)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
Aggiungere o aggiornare più elementi: update(), operatore |=
aggiornamento()
Quando l'argomento keyword key=value è specificato nel metodo update(), la chiave key e il valore value saranno aggiunti. Se la chiave si sovrappone a una chiave esistente, questa verrà sovrascritta con il valore specificato nell'argomento.
d = {'k1': 1, 'k2': 2}
d.update(k1=100, k3=3, k4=4)
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
È anche possibile specificare una lista di (chiave, valore) come argomento del metodo update(). Se la chiave si sovrappone a una chiave esistente, questa sarà sovrascritta con il valore specificato come argomento.
d = {'k1': 1, 'k2': 2}
d.update([('k1', 100), ('k3', 3), ('k4', 4)])
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
In combinazione con la funzione zip(), si possono aggiungere elementi da una lista di chiavi e una lista di valori.
d = {'k1': 1, 'k2': 2}
keys = ['k1', 'k3', 'k4']
values = [100, 3, 4]
d.update(zip(keys, values))
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
operatore |= (Python 3.9 e successivi)
Con l'operatore |=, una lista di (chiave, valore) può essere specificata sul lato destro.
d = {'k1': 1, 'k2': 2}
d |= [('k1', 100), ('k3', 3), ('k4', 4)]
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}
Notate che specificare una lista con l'operatore | risulterà in un errore. Sono supportate solo le operazioni da dizionario a dizionario.
# print(d | [('k1', 100), ('k3', 3), ('k4', 4)])
# TypeError: unsupported operand type(s) for |: 'dict' and 'list'