25/04/2024
I den moderne verden af databehandling, kan vi tænke på datastrukturer som kroppens vitale organer; hver især har en specifik funktion, der er afgørende for systemets overordnede sundhed og effektivitet. En af de mest alsidige og kraftfulde datastrukturer i Python er dictionary. Man kan sammenligne en dictionary med et velorganiseret medicinsk arkiv. Hver patient (en nøgle) har en unik journal (en værdi), der indeholder al deres information. At kunne slå en patient op øjeblikkeligt via deres unikke ID er langt mere effektivt end at bladre gennem tusindvis af usorterede mapper. Denne artikel er din komplette guide til at forstå og anvende Python dictionaries, så du kan sikre, at din kode er robust, effektiv og sund.

Hvad er en Python Dictionary?
En Python dictionary er en uordnet (før Python 3.7) og nu ordnet (fra Python 3.7 og frem) samling af dataelementer. I modsætning til sekventielle datastrukturer som lister, der organiserer data baseret på deres position (indeks), organiserer dictionaries data ved hjælp af nøgle-værdi-par. Hver nøgle er unik og bruges til at hente den tilknyttede værdi. Tænk på det som en ordbog: du slår et ord (nøglen) op for at finde dets definition (værdien).
Værdier i en dictionary kan være af enhver datatype og kan duplikeres, men nøglerne skal være unikke og af en uforanderlig (immutable) datatype, såsom strenge, tal eller tupler. Lister og andre dictionaries kan ikke bruges som nøgler.
# Eksempel på en simpel dictionary patient_journal = { "patient_id": "P10234", "navn": "Jens Hansen", "alder": 45, "diagnoser": ["Hypertension", "Type 2 Diabetes"] } print(patient_journal) # Output: {'patient_id': 'P10234', 'navn': 'Jens Hansen', 'alder': 45, 'diagnoser': ['Hypertension', 'Type 2 Diabetes']} Oprettelse af en Dictionary
Der er to primære måder at oprette en dictionary på i Python. Den mest almindelige er ved at bruge krøllede parenteser {}, og den anden er ved at bruge den indbyggede dict()-konstruktør.
Med krøllede parenteser
Dette er den mest direkte metode. Du placerer en række nøgle-værdi-par adskilt af kommaer inden i krøllede parenteser. Hver nøgle er adskilt fra sin værdi med et kolon :.
# Oprettelse med krøllede parenteser apteks_lager = {"Panodil": 500, "Ibuprofen": 350, "Aspirin": 200} print(apteks_lager) Med dict()-konstruktøren
dict()-konstruktøren kan bruges til at oprette dictionaries på flere måder, f.eks. fra en sekvens af nøgle-værdi-par i tupler.
# Oprettelse med dict()-konstruktøren afdeling_info = dict(navn="Kardiologi", etage=3, laege="Dr. Nielsen") print(afdeling_info) # Output: {'navn': 'Kardiologi', 'etage': 3, 'laege': 'Dr. Nielsen'} Grundlæggende Operationer med Dictionaries
Når du har oprettet din dictionary, vil du have brug for at tilgå, tilføje, opdatere og fjerne data. Disse operationer er kernen i at arbejde med dictionaries.

Adgang til elementer
Du kan få adgang til en værdi ved at angive dens nøgle i firkantede parenteser []. Hvis nøglen ikke findes, vil dette resultere i en KeyError. En mere sikker metode er at bruge get()-metoden, som returnerer None (eller en specificeret standardværdi), hvis nøglen ikke findes.
patient_journal = {"navn": "Jens Hansen", "alder": 45} # Adgang med firkantede parenteser print(patient_journal["navn"]) # Output: Jens Hansen # Adgang med get()-metoden print(patient_journal.get("alder")) # Output: 45 print(patient_journal.get("blodtype", "Ukendt")) # Output: Ukendt Tilføjelse og opdatering af elementer
Det er nemt at tilføje et nyt nøgle-værdi-par eller opdatere en eksisterende værdi. Du bruger simpelthen tildelingsoperatoren =.
patient_journal = {"navn": "Jens Hansen", "alder": 45} # Tilføj et nyt element patient_journal["blodtype"] = "A+" # Opdater et eksisterende element patient_journal["alder"] = 46 print(patient_journal) # Output: {'navn': 'Jens Hansen', 'alder': 46, 'blodtype': 'A+'} Du kan også bruge update()-metoden til at tilføje eller opdatere flere elementer på én gang fra en anden dictionary.
nye_data = {"by": "København", "alder": 47} patient_journal.update(nye_data) print(patient_journal) # Output: {'navn': 'Jens Hansen', 'alder': 47, 'blodtype': 'A+', 'by': 'København'} Fjernelse af elementer
Der er flere måder at fjerne elementer fra en dictionary:
- del: Fjerner et element baseret på dets nøgle. Giver en
KeyError, hvis nøglen ikke findes. - pop(): Fjerner et element baseret på dets nøgle og returnerer værdien. Kan tage en standardværdi for at undgå fejl.
- popitem(): Fjerner og returnerer det sidst indsatte nøgle-værdi-par (i Python 3.7+).
- clear(): Fjerner alle elementer fra dictionaryen og efterlader den tom.
data = {'a': 1, 'b': 2, 'c': 3, 'd': 4} # Brug af del del data['a'] print(data) # Output: {'b': 2, 'c': 3, 'd': 4} # Brug af pop() vaerdi = data.pop('b') print(vaerdi) # Output: 2 print(data) # Output: {'c': 3, 'd': 4} # Brug af popitem() par = data.popitem() print(par) # Output: ('d', 4) print(data) # Output: {'c': 3} # Brug af clear() data.clear() print(data) # Output: {} Iteration gennem en Dictionary
Du kan nemt gennemløbe en dictionary med en for-løkke. Du kan iterere over nøgler, værdier eller begge dele.
laege_kontor = {"mandag": "Dr. Olsen", "tirsdag": "Dr. Jensen", "onsdag": "Dr. Petersen"} # Iterer over nøgler (standard) print("Ugedage:") for dag in laege_kontor: print(dag) # Iterer over værdier print("\nLæger:") for laege in laege_kontor.values(): print(laege) # Iterer over nøgle-værdi-par print("\nKomplet vagtplan:") for dag, laege in laege_kontor.items(): print(f"{dag}: {laege}") Kopiering af Dictionaries: Shallow vs. Deep Copy
Når du kopierer en dictionary, er det vigtigt at forstå forskellen mellem en shallow copy og en deep copy. Dette er især kritisk, når din dictionary indeholder andre muterbare objekter, som f.eks. lister.
Shallow Copy
En shallow copy opretter en ny dictionary, men indsætter referencer til objekterne fra den oprindelige dictionary. Hvis et af disse objekter er muterbart (f.eks. en liste), vil ændringer i objektet i den ene dictionary også afspejles i den anden. Tænk på det som at give en kollega en kopi af en henvisning til en patients journal. I har begge adgang til den samme, originale journal.

import copy original_journal = { 'id': 'P123', 'tests': ['Blodprøve', 'EKG'] } shallow_kopi = copy.copy(original_journal) # Ændr listen i kopien shallow_kopi['tests'].append('Røntgen') print("Original:", original_journal) print("Shallow Kopi:", shallow_kopi) # Begge vil nu have 'Røntgen' i deres 'tests'-liste. Deep Copy
En deep copy opretter en ny dictionary og opretter rekursivt kopier af alle objekter, der findes i den oprindelige. Det betyder, at de to dictionaries er fuldstændig uafhængige af hinanden. Dette svarer til at fotokopiere hele patientjournalen, inklusiv alle undersider og dokumenter. Ændringer i kopien påvirker ikke originalen.
import copy original_journal = { 'id': 'P123', 'tests': ['Blodprøve', 'EKG'] } deep_kopi = copy.deepcopy(original_journal) # Ændr listen i kopien deep_kopi['tests'].append('Røntgen') print("Original:", original_journal) print("Deep Kopi:", deep_kopi) # Kun deep_kopi vil have 'Røntgen' i sin 'tests'-liste. Oversigt over Vigtige Dictionary-metoder
Her er en tabel, der opsummerer de mest almindelige metoder, du kan bruge på dictionaries.
| Metode | Beskrivelse |
|---|---|
clear() | Fjerner alle elementer fra dictionaryen. |
copy() | Returnerer en shallow copy af dictionaryen. |
get(key, default) | Returnerer værdien for en nøgle. Returnerer default, hvis nøglen ikke findes. |
items() | Returnerer et view-objekt, der viser en liste af dictionaryens nøgle-værdi-tupler. |
keys() | Returnerer et view-objekt, der viser en liste af dictionaryens nøgler. |
pop(key, default) | Fjerner den specificerede nøgle og returnerer den tilsvarende værdi. |
popitem() | Fjerner og returnerer det sidst indsatte nøgle-værdi-par som en tuple. |
update(other_dict) | Opdaterer dictionaryen med nøgle-værdi-par fra en anden dictionary. |
values() | Returnerer et view-objekt, der viser en liste af dictionaryens værdier. |
Ofte Stillede Spørgsmål (FAQ)
Hvorfor er dictionaries så hurtige?
Dictionaries i Python er implementeret ved hjælp af en datastruktur kaldet en hash-tabel. Dette betyder, at når du vil finde en værdi, beregnes en 'hash' af nøglen, som direkte peger på hukommelsesplaceringen af værdien. Dette gør opslag, indsættelse og sletning utroligt hurtige, typisk med en gennemsnitlig tidskompleksitet på O(1), uanset hvor stor dictionaryen er. Det er som at have et perfekt indekssystem i et arkiv.
Er dictionaries ordnede?
Fra og med Python version 3.7 er dictionaries garanteret at bevare den rækkefølge, som elementerne blev indsat i. I tidligere versioner (f.eks. Python 3.6 og ældre) var rækkefølgen vilkårlig og kunne ikke stoles på. Hvis du arbejder med ældre Python-versioner og har brug for en ordnet dictionary, skal du bruge collections.OrderedDict.
Hvordan tjekker jeg, om en nøgle findes i en dictionary?
Den mest pythonske måde at gøre dette på er ved at bruge in-nøgleordet. Det er både læsbart og effektivt.
laege_kontor = {"mandag": "Dr. Olsen", "tirsdag": "Dr. Jensen"} if "onsdag" in laege_kontor: print("Der er en læge på vagt om onsdagen.") else: print("Kontoret er lukket om onsdagen.") At mestre dictionaries er et afgørende skridt for enhver Python-udvikler. Deres fleksibilitet, hastighed og intuitive nøgle-værdi-struktur gør dem uundværlige til at modellere og håndtere data fra den virkelige verden. Ved at forstå deres kernefunktioner, fra grundlæggende operationer til mere avancerede koncepter som deep copying, kan du skrive renere, mere effektiv og mere robust kode.
Hvis du vil læse andre artikler, der ligner Python Dictionaries: En Komplet Sundhedsguide, kan du besøge kategorien Teknologi.
