Come unire due dizionari di Python

In un precedente tutorial abbiamo imparato a conoscere i dizionari Python e abbiamo visto che sono considerati set non ordinati con a chiave / valore coppia, dove chiavi vengono utilizzati per accedere agli elementi rispetto alla posizione, ad esempio negli elenchi.

In questo suggerimento rapido, ti mostrerò come concatenare (unire) due dizionari insieme.

Il metodo Update ()

Diciamo che abbiamo i seguenti due dizionari:

dict1 = 'bookA': 1, 'bookB': 2, 'bookC': 3 dict2 = 'bookC': 2, 'bookD': 4, 'bookE': 5

Come possiamo unire questi due dizionari in un singolo dizionario? Una funzione che possiamo usare a questo riguardo è aggiornamento ([other]). Come indicato nella documentazione di Python:

Aggiorna il dizionario con le coppie chiave / valore da altro, sovrascrivere le chiavi esistenti. Ritorno Nessuna.
aggiornare() accetta un altro oggetto dizionario o un iterabile di coppie chiave / valore (come tuple o altri iterabili di lunghezza due). Se vengono specificati gli argomenti delle parole chiave, il dizionario viene aggiornato con quelle coppie chiave / valore: d.update (rosso = 1, blu = 2).

Quindi, per unire i due dizionari sopra, possiamo digitare quanto segue:

dict2.update (dict1)

Dì che hai digitato la seguente dichiarazione per visualizzare i risultati:

stampa dict2.update (dict1)

In questo caso otterrai Nessuna! Questo perché il aggiornare() la funzione non restituisce un nuovo dizionario. Per ottenere il risultato della concatenazione, è sufficiente digitare quanto segue:

stampa dict2

In tal caso, otterrai il seguente risultato:

'bookA': 1, 'bookB': 2, 'bookC': 3, 'bookD': 4, 'bookE': 5

Cosa succede se abbiamo fatto quanto segue?

dict1.update (dict2) stampa dict1

In questo caso, otterrai il seguente risultato:

'bookA': 1, 'bookB': 2, 'bookC': 2, 'bookD': 4, 'bookE': 5

Si noti che nel primo caso, dict2.update (dict1), aggiorniamo il dizionario dict2 con le coppie chiave / valore da dict1, e sovrascrive qualsiasi chiave esistente. La chiave esistente, come possiamo notare, è 'BookC', che avrà il valore 3 in questo caso, dal momento che stiamo aggiornando con le coppie chiave / valore da dict1. Questo sarà invertito in quest'ultimo caso, dict1.update (dict2), dove stiamo aggiornando il dizionario dict1 con coppie chiave / valore da dict2.

Tuttavia, c'è un problema nell'utilizzo aggiornare() unire due dizionari. Il problema sta nel fatto che il dizionario originale può essere modificato. In altre parole, nel primo caso per esempio, dict2.update (dict1), la versione originale di dict2 potrebbe essere modificato, e in quest'ultimo caso, dict1.update (dict2), la versione originale di dict1 potrebbe essere modificato. Questo vuol dire che puoi usare aggiornare() unire due dizionari se non sei interessato a mantenere la versione originale del dizionario che devi aggiornare. Con la versione originale qui intendo il mantenimento del valore della chiave.

Unione di due dizionari in una singola espressione

Un altro metodo che è possibile utilizzare per unire due dizionari, in cui è possibile eseguire tale attività in una singola espressione, è il seguente:

stampa dict (dict2, ** dict1)

L'output di questa affermazione è:

'bookA': 1, 'bookB': 2, 'bookC': 3, 'bookD': 4, 'bookE': 5

così, dict1 le sostituzioni dict2. Se vogliamo dict2 per sovrascrivere dict1, scriviamo:

stampa dict (dict1, ** dict2)

L'output in questo caso sarebbe:

'bookA': 1, 'bookB': 2, 'bookC': 2, 'bookD': 4, 'bookE': 5

Valori chiave di ritenzione 

Tornando al precedente problema di mantenere i valori chiave, come possiamo unire due dizionari mantenendo gli originali di ciascun dizionario?

Un rimedio per questo può essere il seguente (tratto dalla risposta in questo thread StackOverflow):

from itertools import chain from collections import defaultdict dict1 = 'bookA': 1, 'bookB': 2, 'bookC': 3 dict2 = 'bookC': 2, 'bookD': 4, 'bookE': 5 dict3 = defaultdict (list) per k, v in chain (dict1.items (), dict2.items ()): dict3 [k] .append (v) per k, v in dict3.items (): print (k, v)

L'output in questo caso sarà:

('bookA', [1]) ('bookB', [2]) ('bookC', [3, 2]) ('bookD', [4]) ('bookE', [5])

Quindi, come puoi vedere da questo suggerimento, è molto facile unire due dizionari usando Python, e diventa un po 'più complesso se vogliamo mantenere i valori della stessa chiave in ogni dizionario.

Impara Python

Impara Python con la nostra guida completa al tutorial su Python, sia che tu stia appena iniziando o che sei un programmatore esperto che cerca di imparare nuove abilità.