Dictionaries og sets i Python
Udforsk oprettelse af dicts og sets, medlemskabstest og almindelige mønstre som frekvensoptælling med collections.Counter.
Dictionaries og sets i Python er en gratis Forberedelse til kodeinterviews-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Forberedelse til kodeinterviews, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Forberedelse til kodeinterviews-kurset indeholder 4 lektioner i alt.
Python-dictionaries: Nøgle-værdi-lagre
En Python-dict knytter nøgler til værdier med opslag, indsættelse og sletning i gennemsnit på O(1). Den er grundlaget for two-sum, anagramkontrol og frekvensoptælling. Koden viser det.
d = {'apple': 3, 'banana': 5}
print(d['apple']) # 3
d['cherry'] = 7
print(len(d)) # 3
print('banana' in d) # True
del d['apple']
print(d) # {'banana': 5, 'cherry': 7}Sikkert opslag med .get()
Hvis du læser en manglende nøgle med d[key], går programmet ned med en KeyError. Brug d.get(key, default) til at returnere en reserveværdi i stedet – en sikker vane, der undgår uventede kørselsfejl.
freq = {}
words = ['the', 'cat', 'sat', 'on', 'the', 'mat']
for w in words:
freq[w] = freq.get(w, 0) + 1
print(freq)
# {'the': 2, 'cat': 1, 'sat': 1, 'on': 1, 'mat': 1}
print(freq.get('dog', 0)) # 0 (no KeyError)defaultdict til renere gruppering
defaultdict(list) opretter automatisk en tom liste for hver ny nøgle, så grupperingsproblemer slipper for overflødig standardkode. defaultdict(int) starter hver nøgle på 0, så optælling bliver enkel.
from collections import defaultdict
groups = defaultdict(list)
words = ['eat', 'tea', 'tan', 'ate', 'nat', 'bat']
for w in words:
key = ''.join(sorted(w)) # canonical anagram key
groups[key].append(w)
print(list(groups.values()))
# [['eat','tea','ate'], ['tan','nat'], ['bat']]Counter: Hurtige frekvenskort
Counter er en dict, der er lavet til optælling: Giv den en hvilken som helst itererbar værdi, og få et frekvenskort med det samme. most_common(k) returnerer de k hyppigste. Koden viser en anagramkontrol.
from collections import Counter
c = Counter('abracadabra')
print(c) # Counter({'a':5,'b':2,'r':2,'c':1,'d':1})
print(c.most_common(2)) # [('a', 5), ('b', 2)]
# Valid anagram check
def is_anagram(s, t):
return Counter(s) == Counter(t)
print(is_anagram('anagram', 'nagaram')) # TruePython-sets: Uordnede samlinger af unikke elementer
Et set indeholder unikke elementer og giver O(1)-kontrol af medlemskab. Brug {1, 2, 3} eller set(iterable) – men {} opretter en dict, så brug set() til et tomt set. Det er fremragende til at finde dubletter.
seen = set()
nums = [1, 2, 3, 2, 1, 4]
duplicates = []
for n in nums:
if n in seen: # O(1) check
duplicates.append(n)
seen.add(n)
print(duplicates) # [2, 1]
print(len(seen)) # 4 (unique values)Set-operationer til jobsamtaler
Sets kan mængdeberegninger: | forening, & snit, - differens og ^ symmetrisk differens. De løser spørgsmål om "fælles elementer" på én linje.
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print(a | b) # {1, 2, 3, 4, 5, 6} union
print(a & b) # {3, 4} intersection
print(a - b) # {1, 2} difference
print(a ^ b) # {1, 2, 5, 6} symmetric diffMedlemskabskontrol: List versus set
Den datastruktur, du vælger, påvirker hastigheden. Kontrol af in i en liste er O(n), mens den i et set er O(1). At konvertere en liste til et set før gentagne opslag er en almindelig hastighedsforbedring.
word_list = ['apple', 'banana', 'cherry', 'date']
word_set = set(word_list)
# O(n) per check
print('banana' in word_list) # True
# O(1) per check
print('banana' in word_set) # True
# Practical example: find common elements
a = [1, 2, 3, 4, 5]
b = [3, 4, 5, 6, 7]
common = [x for x in a if x in set(b)]
print(common) # [3, 4, 5]Gennemløb af dicts: Nøgler, værdier og elementer
Gennemgå en dict med .keys(), .values() eller .items(). Slet aldrig nøgler midt i løkken – saml dem først i en liste, og slet dem derefter. Se koden.
scores = {'Alice': 90, 'Bob': 75, 'Carol': 88}
for name, score in scores.items():
print(f'{name}: {score}')
# Find key with max value
best = max(scores, key=scores.get)
print(best) # Alice
# Safe deletion
to_del = [k for k, v in scores.items() if v < 80]
for k in to_del:
del scores[k]
print(scores) # {'Alice': 90, 'Carol': 88}Frozenset: Hashbare sets
Et frozenset er et uforanderligt set, så det kan være en dict-nøgle eller ligge i et andet set. Det er praktisk til at gruppere anagrammer efter deres bogstavmængde, når rækkefølgen er ligegyldig.
from collections import defaultdict
words = ['eat', 'tea', 'tan', 'ate', 'nat', 'bat']
groups = defaultdict(list)
for w in words:
key = frozenset(w) # hashable; 'eat','tea','ate' all share same key
groups[key].append(w)
print([sorted(g) for g in groups.values()])
# [['ate','eat','tea'], ['nat','tan'], ['bat']]Dict-forståelser til transformationer
Dict-forståelser opbygger en afbildning på én linje: {k: v for ...}. De er velegnede til at vende en dict om eller filtrere par. Bemærk: En inversion forudsætter, at værdierne er unikke. Se koden.
# Invert a dict
original = {'a': 1, 'b': 2, 'c': 3}
inverted = {v: k for k, v in original.items()}
print(inverted) # {1:'a', 2:'b', 3:'c'}
# Filter by value
scores = {'Alice': 90, 'Bob': 55, 'Carol': 78}
passing = {k: v for k, v in scores.items() if v >= 60}
print(passing) # {'Alice': 90, 'Carol': 78}Længste sammenhængende talfølge
Sets løser problemet med den længste sammenhængende talfølge i O(n): Læg alle tal i et set, og tæl derefter kun op fra hvert tal, hvis forgænger mangler. Der er ikke brug for sortering.
def longest_consecutive(nums):
num_set = set(nums)
best = 0
for n in num_set:
if n - 1 not in num_set: # start of sequence
cur = n
streak = 1
while cur + 1 in num_set:
cur += 1
streak += 1
best = max(best, streak)
return best
print(longest_consecutive([100,4,200,1,3,2])) # 4 (1,2,3,4)Hurtig kontrol
Hurtig kontrol – se, hvor godt idéerne om dicts og sets fra denne lektion har hængt ved. Stol på din intuition her. 🎯
Opsummering af lektionen
Opsummering: dicts giver O(1)-opslag til optælling og gruppering, Counter og defaultdict reducerer standardkoden, og sets forvandler gennemløb på O(n) til kontroller på O(1).
Lær Forberedelse til kodeinterviews med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 90
- Lektioner
- 360
Ofte stillede spørgsmål
Er lektionen “Dictionaries og sets i Python” gratis?
Ja — hele teksten til “Dictionaries og sets i Python” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Forberedelse til kodeinterviews-kurset, skal du opgradere til CoddyKit PRO. Forberedelse til kodeinterviews-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Dictionaries og sets i Python”?
Udforsk oprettelse af dicts og sets, medlemskabstest og almindelige mønstre som frekvensoptælling med collections.Counter. Du øver dig i Forberedelse til kodeinterviews med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Forberedelse til kodeinterviews?
Der kræves ingen tidligere erfaring. Forberedelse til kodeinterviews på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “Dictionaries og sets i Python”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Forberedelse til kodeinterviews-lektion?
Ja. Alle Forberedelse til kodeinterviews-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Lister, tupler og slicing
- Dictionaries og sets i Python
- Comprehensions og indbyggede funktioner
- Funktioner, closures og lambda