Dictionaries och mängder i Python
Utforska hur dict och set skapas, medlemskapstestning och vanliga mönster som frekvensräkning med collections.Counter.
Dictionaries och mängder i Python är en gratis lektion i DSA Interview Prep på CoddyKit. Detta är lektion 2 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för DSA Interview Prep, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i DSA Interview Prep innehåller totalt 4 lektioner.
Python-dict: lagring av nyckel–värde-par
En Python-dict mappar nycklar till värden med i genomsnitt O(1) för uppslag, insättning och borttagning. Den är motorn bakom two-sum, anagramkontroller och frekvensräkning. Koden visar hur det fungerar.
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}Säkra uppslag med .get()
Om man läser en saknad nyckel med d[key] uppstår ett KeyError. Använd d.get(key, default) för att returnera ett reservvärde i stället – en säker vana som undviker oväntade körtidsfel.
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 för enklare gruppering
defaultdict(list) skapar automatiskt en tom lista för varje ny nyckel, så grupperingsproblem slipper mycket standardkod. defaultdict(int) börjar varje nyckel på 0, vilket gör räkning 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: snabba frekvensmappningar
Counter är en dict byggd för räkning: ge den vilket itererbart objekt som helst och få en frekvensmappning direkt. most_common(k) returnerar de k vanligaste. Koden visar en anagramkontroll.
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-set: oordnade samlingar av unika element
En set innehåller unika element och ger O(1) för medlemskapstest. Använd {1, 2, 3} eller set(iterable) – men {} skapar en dict, så använd set() för en tom mängd. Perfekt för att upptäcka dubbletter.
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 inför intervjuer
Sets stöder mängdoperationer: | union, & snitt, - differens och ^ symmetrisk differens. De löser frågor om "gemensamma element" på en enda rad.
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 diffMedlemskapstest: list jämfört med set
Valet av datastruktur påverkar hastigheten. Att kontrollera in i en lista tar O(n), medan det tar O(1) i en set. Att omvandla en lista till en set före upprepade uppslag är en vanlig prestandaförbättring.
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]Iterera över dictar: nycklar, värden och poster
Iterera över en dict med .keys(), .values() eller .items(). Ta aldrig bort nycklar mitt i en loop – samla dem först i en lista och ta sedan bort dem efteråt. 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: hashbara mängder
En frozenset är en oföränderlig set och kan därför användas som dict-nyckel eller ligga i en annan set. Det är praktiskt för att gruppera anagram efter deras uppsättning bokstäver när ordningen saknar betydelse.
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 comprehensions för transformationer
Dict comprehensions bygger en mappning på en enda rad: {k: v for ...}. Det passar utmärkt för att invertera en dict eller filtrera par. Observera att invertering förutsätter att värdena är unika. 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ängsta sammanhängande talföljd
Sets löser problemet med längsta sammanhängande talföljd på O(n): lägg in alla tal i en set och räkna sedan uppåt endast från tal vars föregångare saknas. Ingen sortering behövs.
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)Snabbtest
Snabbtest – se hur väl idéerna om dict och set från den här lektionen har fastnat. Lita på er intuition. 🎯
Sammanfattning av lektionen
Sammanfattning: dictar ger O(1)-uppslag för räkning och gruppering, Counter och defaultdict minskar mängden standardkod och sets omvandlar genomsökningar på O(n) till kontroller på O(1).
Lär dig Python med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 30
- Lektioner
- 120
Vanliga frågor
Är lektionen ”Dictionaries och mängder i Python” gratis?
Ja – hela texten till ”Dictionaries och mängder i Python” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i DSA Interview Prep, kan Ni uppgradera till CoddyKit PRO. Kursen i DSA Interview Prep innehåller totalt 4 lektioner.
Vad lär jag mig i ”Dictionaries och mängder i Python”?
Utforska hur dict och set skapas, medlemskapstestning och vanliga mönster som frekvensräkning med collections.Counter. Ni övar på DSA Interview Prep med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig DSA Interview Prep?
Du behöver inga förkunskaper. Utbildningen i DSA Interview Prep på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.
Hur lång tid tar lektionen ”Dictionaries och mängder i Python”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här DSA Interview Prep-lektionen?
Ja. Varje DSA Interview Prep-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Listor, tupler och slicing
- Dictionaries och mängder i Python
- Comprehensions och inbyggda funktioner
- Funktioner, closures och lambda