Hvordan slå sammen to pythonordbøker

I en tidligere opplæring lærte vi om Python-ordbøker, og så at de ble betraktet som uordnede sett med a nøkkel / verdi par, hvor nøkler brukes til å få tilgang til elementer i motsetning til stillingen, som for eksempel i lister.

I dette raske tipset skal jeg vise deg hvordan du sammenkaller (sammenføyer) to ordbøker sammen.

Oppdateringen () -metoden

La oss si at vi har følgende to ordbøker:

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

Hvordan kan vi slå sammen de to ordbøkene i en enkelt ordbok? En funksjon vi kan bruke i denne forbindelse er oppdatering ([annet]). Som nevnt i Python dokumentasjonen:

Oppdater ordboken med nøkkel / verdi par fra annen, overskrive eksisterende nøkler. Komme tilbake Ingen.
Oppdater() aksepterer enten et annet ordbordsobjekt eller en iterbar av nøkkel / verdi par (som tuples eller andre iterables av lengde to). Hvis søkeordargumenter er angitt, blir ordlisten oppdatert med disse nøkkel / verdi-parene: d.update (red = 1, blå = 2).

Så, for å slå sammen de ovennevnte to ordbøkene, kan vi skrive følgende:

dict2.update (dict1)

Si at du har skrevet følgende setning for å vise resultatene:

skriv ut dict2.update (dict1)

I dette tilfellet får du Ingen! Dette skyldes at Oppdater() funksjonen returnerer ikke en ny ordbok. For å få resultatet av sammenkoblingen, skriv bare følgende:

skriv ut dict2

I så fall får du følgende utgang:

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

Hva om vi gjorde følgende?

dict1.update (dict2) print dict1

I dette tilfellet får du følgende utgang:

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

Legg merke til at i det første tilfellet, dict2.update (dict1), Vi oppdaterer ordboken dict2 med nøkkel / verdi par fra dict1, og overskrive eventuelle eksisterende nøkler. Den eksisterende nøkkelen som vi kan legge merke til er 'BookC', som vil ha verdien 3 i dette tilfellet, siden vi oppdaterer med nøkkel / verdi par fra dict1. Dette vil bli reversert i sistnevnte tilfelle, dict1.update (dict2), hvor vi oppdaterer ordboken dict1 med nøkkel / verdi par fra dict2.

Det er imidlertid et problem å bruke Oppdater() å slå sammen to ordbøker. Problemet ligger i det faktum at den opprinnelige ordlisten kan endres. Med andre ord, for eksempel i det første tilfellet, dict2.update (dict1), den opprinnelige versjonen av dict2 kan endres, og i sistnevnte tilfelle, dict1.update (dict2), den opprinnelige versjonen av dict1 kan endres. Det vil si at du kan bruke Oppdater() å slå sammen to ordbøker hvis du ikke er interessert i å holde den opprinnelige versjonen av ordlisten du trenger å oppdatere. Med den opprinnelige versjonen her mener jeg å beholde verdien av nøkkelen.

Slå sammen to ordbøker i et enkelt uttrykk

En annen metode du kan bruke til å slå sammen to ordbøker, hvor du kan utføre en slik oppgave i et enkelt uttrykk, er som følger:

skriv ut dikt (dict2, ** dict1)

Resultatet av denne setningen er:

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

Og dermed, dict1 styrer dict2. Hvis vi vil dict2 å overstyre dict1, vi skriver:

skriv ut dikt (dict1, ** dict2)

Utgangen i dette tilfellet ville være:

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

Beholder nøkkelverdier 

Når vi går tilbake til det forrige spørsmålet om å holde nøkkelverdiene, hvordan kan vi slå sammen to ordbøker mens originalene i hver ordliste holdes?

En løsning for dette kan være som følger (hentet fra svaret i denne StackOverflow-tråden):

fra itertools importkjede fra samlinger import defaultdict dict1 = 'bookA': 1, 'bookB': 2, 'bookC': 3 dict2 = 'bookC': 2, 'bookD': 4, 'bookE': 5 dict3 = defaultdict (list) for k, v i kjeden (dict1.items (), dict2.items ()): dict3 [k] .append (v) for k, v i dict3.items (): print v)

Utgangen i dette tilfellet vil være:

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

Så som du kan se fra dette raske tipset, er det veldig enkelt å slå sammen to ordbøker ved hjelp av Python, og det blir litt mer komplekst hvis vi ønsker å beholde verdiene til samme nøkkel i hver ordbok.

Lær python

Lær Python med vår komplette pythonveiledning, enten du er bare i gang eller du er en erfaren coder som ønsker å lære nye ferdigheter..