Aggiungere elementi a un dizionario e unire dizionari in Python

Attività commerciale

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'