Cum să combinați două dicționare Python

Într-un tutorial anterior am învățat despre dicționarele Python și am văzut că sunt considerate seturi neordonate cu a valoare cheie pereche, unde chei sunt utilizate pentru a accesa elementele, spre deosebire de poziție, ca de exemplu în liste.

În acest sfat rapid, vă voi arăta cum să concatenați (îmbina) două dicționare împreună.

Metoda Update ()

Să presupunem că avem următoarele două dicționare:

dict1 = 'bookA': 1, 'bookB': 2, 'bookC': 3 dict2 = 'bookC': 2,

Cum putem îmbina aceste două dicționare într-un singur dicționar? O funcție pe care o putem folosi în această privință este actualizare ([other]). După cum se precizează în documentația Python:

Actualizați dicționarul cu perechile cheie / valoare de la alte, suprascrierea cheilor existente. Întoarcere Nici unul.
Actualizați() acceptă fie un alt obiect de dicționar, fie o pereche iterabilă de chei / valoare (ca tuple sau alte iterații de lungime doi). Dacă sunt specificate argumentele pentru cuvinte cheie, dicționarul este apoi actualizat cu acele perechi cheie / valoare: d.update (roșu = 1, albastru = 2).

Deci, pentru a îmbina cele două dicționare de mai sus, putem scrie următoarele:

dict2.update (dict1)

Spuneți că ați introdus următoarea declarație pentru a vedea rezultatele:

tipăriți dict2.update (dict1)

În acest caz veți obține Nici unul! Acest lucru se datorează faptului că Actualizați() funcția nu returnează un nou dicționar. Pentru a obține rezultatul concatenării, tastați următoarele:

print dict2

În acest caz, veți obține următoarele rezultate:

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

Dacă am făcut următoarele?

dict1.update (dict2) tipăriți dict1

În acest caz, veți obține următoarea ieșire:

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

Observați că în primul caz, dict2.update (dict1), actualizăm dicționarul dict2 cu perechi cheie / valoare de la dict1, și suprascrierea oricăror chei existente. Cheia existentă după cum putem observa este 'BookC', care va avea valoarea 3 în acest caz, deoarece ne actualizăm cu perechi cheie / valoare de la dict1. Acest lucru va fi inversat în ultimul caz, dict1.update (dict2), unde actualizăm dicționarul dict1 cu perechi cheie / valoare de la dict2.

Cu toate acestea, există o problemă în utilizarea Actualizați() pentru a îmbina două dicționare. Problema constă în faptul că dicționarul original poate fi modificat. Cu alte cuvinte, în primul caz de exemplu, dict2.update (dict1), versiunea originală a dict2 ar putea fi modificate, iar în ultimul caz, dict1.update (dict2), versiunea originală a dict1 ar putea fi modificate. Asta înseamnă că poți folosi Actualizați() pentru a îmbina două dicționare dacă nu sunteți interesat să păstrați versiunea originală a dicționarului pe care trebuie să o actualizați. Prin versiunea originală aici vreau să spun păstrarea valorii cheii.

Îmbinarea a două dicționare într-o singură expresie

O altă metodă pe care o puteți utiliza pentru a îmbina două dicționare, unde puteți efectua o astfel de sarcină într-o singură expresie, este după cum urmează:

print dict (dict2, ** dict1)

Rezultatul acestei instrucțiuni este:

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

Prin urmare, dict1 înlocuirile dict2. Dacă vrem dict2 a trece peste dict1, introducem:

tipăriți dict (dict1, ** dict2)

Rezultatul în acest caz ar fi:

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

Menținerea valorilor cheie 

Revenind la problema precedentă de păstrare a valorilor cheie, cum putem fuziona două dicționare în timp ce păstrăm originalele fiecărui dicționar?

O soluție pentru aceasta poate fi după cum urmează (luată din răspunsul din acest thread StackOverflow):

de la itertools lanțul de import din colecții import defaultdict dict1 = 'bookA': 1, 'bookB': 2, 'bookC': 3 dict2 = 'bookC': 2, 'bookD' dict3 = defaultdict (listă) pentru k, v în lanț (dict1.items (), dict2.items ()): dict3 [k] .append (v) pentru k, v în dict3.items v)

Rezultatul în acest caz va fi:

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

Deci, după cum puteți vedea din acest sfat rapid, este foarte ușor să îmbinați două dicționare folosind Python și devine un pic mai complex dacă doriți să păstrați valorile aceleiași chei în fiecare dicționar.

Aflați Python

Aflați Python cu ghidul nostru complet de instrucțiuni Python, indiferent dacă sunteți doar începători sau sunteți un coder experimentat în căutarea unor noi abilități.

Cod