Skip to content

Unire più dizionari e aggiungere elementi a un dizionario in Python

Python

Questo articolo spiega come aggiungere un nuovo elemento a un dizionario dict o aggiornare il valore di un elemento esistente in Python. È anche possibile unire più dizionari.

  • Aggiungi/aggiorna un elemento nel/nel dizionario specificando una chiave
  • Unisci più nomi:update(), {}, dict(), |, |=
  • Aggiungi/aggiorna più elementi nel/nel dizionario:update(), |=

Vedere gli articoli seguenti su come rimuovere un elemento da un dizionario, verificare l’esistenza di una chiave e cambiare la chiave.

Aggiungi/aggiorna un elemento nel/nel dizionario specificando una chiave

È possibile aggiungere un elemento al dizionario o aggiornare il valore di un elemento esistente come segue.

Se viene specificata una chiave inesistente, viene aggiunto un nuovo elemento e se viene specificata una chiave esistente, il valore dell’elemento 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 si desidera aggiornare il valore di una chiave esistente, utilizzare il metodo setdefault(). Vedi il seguente articolo.

Unisci più nomi:update(), |, |=

aggiornare()

Specificando un altro dict come argomento del metodo update(), vengono aggiunti tutti i suoi elementi.

Se la chiave si sovrappone a una chiave esistente, viene sovrascritta con il valore di dict 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}

Viene generato un errore se viene specificato più di un dizionario come argomento di update().

d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}
d3 = {'k5': 5, 'k6': 6}

# d1.update(d2, d3)
# TypeError: update expected at most 1 arguments, got 2

Come più avanti, update() può aggiungere nuovi elementi con argomenti chiave (chiave=valore), in modo da poter decomprimere e passare ogni elemento con **.

d1.update(**d2, **d3)
print(d1)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}

In questo caso, va bene che le chiavi del dizionario che chiama il metodo e le chiavi del dizionario specificato nell’argomento siano duplicate come nell’esempio precedente, ma viene generato un errore se le chiavi di più specificati nell’argomento sono duplicati.

d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}
d3 = {'k5': 5, 'k6': 6}

# d3.update(**d1, **d2)
# TypeError: dict.update() got multiple values for keyword argument 'k1'

{} (Python 3.5 o successivo), dict()

Con update(), il dizionario originale viene aggiornato.

Se vuoi creare un nuovo dizionario unendo più dizionari, usa {**d1, **d2} (da Python 3.5) o dict(**d1, **d2).

d1 = {'k1': 1, 'k2': 2}
d2 = {'k3': 3, 'k4': 4}

print({**d1, **d2})
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}

print(dict(**d1, **d2))
# {'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}

Nel caso di caso di ct(**d1, **d2), si verifica un errore se le chiavi di più dizionari come argomenti vengono duplicate.

d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}

print({**d1, **d2})
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

# print(dict(**d1, **d2))
# TypeError: dict() got multiple values for keyword argument 'k1'

Vedere i seguenti articoli per i dettagli su come creare un dizionario.

In Python 3.9 o versioni successive, è anche possibile creare un nuovo dizionario utilizzando | operatore di seguito.

| operatore, |= operatore (Python 3.9 o successivo)

A partire da Python 3.9, è possibile unire due dizionari con il | operatore. Se hanno la stessa chiave, viene sovrascritta dal valore a destra.

d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}

d = d1 | d2
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4}

d = d2 | d1
print(d)
# {'k1': 1, 'k3': 3, 'k4': 4, 'k2': 2}

È possibile combinare più dizionario.

d1 = {'k1': 1, 'k2': 2}
d2 = {'k1': 100, 'k3': 3, 'k4': 4}
d3 = {'k5': 5, 'k6': 6}

d = d1 | d2 | d3
print(d)
# {'k1': 100, 'k2': 2, 'k3': 3, 'k4': 4, 'k5': 5, 'k6': 6}

Vieni += per +, |= per | è anche fornito. Come con update(), l’oggetto a sinistra 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}

Aggiungi/aggiorna più elementi nel/nel dizionario:update(), |=

aggiornare()

Se l’argomento della parola chiave chiave=valore è specificato nel metodo update(), l’elemento con la relativa chiave e valore viene aggiunto. Se la chiave si sovrappone a una esistente, viene 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}

È anche possibile specificare un elenco di (chiave, valore) come argomento del metodo update(). Se la chiave si sovrappone a una esistente, viene 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}

È possibile utilizzare zip() per aggiungere elementi da un elenco di chiavi e da un elenco 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}

Vedere il seguente articolo su zip().

Per gli argomenti delle parole chiave, viene generato un errore se viene specificata la stessa chiave. Nel caso di liste (chiave, valore) e zip(), sono accettabili chiavi duplicate. Viene sovrascritto dal valore successivo.

d = {'k1': 1, 'k2': 2}

# d.update(k3=3, k3=300)
# SyntaxError: keyword argument repeated: k3

d = {'k1': 1, 'k2': 2}

d.update([('k3', 3), ('k3', 300)])
print(d)
# {'k1': 1, 'k2': 2, 'k3': 300}

d = {'k1': 1, 'k2': 2}

keys = ['k3', 'k3']
values = [3, 300]

d.update(zip(keys, values))
print(d)
# {'k1': 1, 'k2': 2, 'k3': 300}

|= operatore(Python 3.9 o successivo)

L’operatore |= acconsenti di specificare un elenco di (chiave, valore) 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}

Il | operatore supporta solo le operazioni tra manuali. Non è possibile specificare un elenco.

# d | [('k1', 100), ('k3', 3), ('k4', 4)]
# TypeError: unsupported operand type(s) for |: 'dict' and 'list'