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.
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.
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
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 med vår komplette pythonveiledning, enten du er bare i gang eller du er en erfaren coder som ønsker å lære nye ferdigheter..