Sanakirjat ja joukot Pythonissa
Tutustukaa dict- ja set-rakenteiden luomiseen, jäsenyyden testaamiseen sekä yleisiin malleihin, kuten frekvenssien laskemiseen collections.Counterilla.
Sanakirjat ja joukot Pythonissa on ilmainen DSA Interview Prep-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu DSA Interview Prep-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. DSA Interview Prep-kurssilla on yhteensä 4 oppituntia.
Pythonin sanakirjat: avain-arvo-säilöt
Pythonin dict yhdistää avaimet arvoihin, ja sen haut, lisäykset ja poistot ovat keskimäärin O(1). Se on two-sum-ratkaisujen, anagrammitarkistusten ja esiintymien laskennan perusta. Koodi näyttää, miten sitä käytetään.
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}Turvallinen haku .get()-metodilla
Puuttuvan avaimen lukeminen muodossa d[key] aiheuttaa KeyError-virheen. Käyttäkää sen sijaan muotoa d.get(key, default), joka palauttaa oletusarvon — näin vältätte yllättävät ajonaikaiset virheet.
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 selkeyttää ryhmittelyä
defaultdict(list) luo automaattisesti tyhjän listan jokaiselle uudelle avaimelle, joten ryhmittelyyn tarvitaan vähemmän toistuvaa peruskoodia. defaultdict(int) aloittaa jokaisen avaimen arvosta 0, mikä helpottaa laskemista.
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: nopeat esiintymäkartat
Counter on laskemiseen tarkoitettu dict: antakaa sille mikä tahansa iteroitava olio, niin saatte heti esiintymäkartan. most_common(k) palauttaa k yleisintä alkiota. Koodi näyttää anagrammitarkistuksen.
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')) # TruePythonin setit: järjestämättömät yksikäsitteisten alkioiden kokoelmat
set sisältää yksikäsitteisiä alkioita, ja jäsenyyden tarkistaminen on O(1). Käyttäkää muotoa {1, 2, 3} tai set(iterable) — mutta {} luo dictin, joten tyhjän setin luomiseen on käytettävä muotoa set(). Setit sopivat erinomaisesti duplikaattien löytämiseen.
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-operaatiot työhaastatteluja varten
Setit tukevat joukko-operaatioita: | on yhdiste, & leikkaus, - erotus ja ^ symmetrinen erotus. Näillä ratkeavat "yhteiset alkiot" -tyyppiset kysymykset yhdellä rivillä.
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 diffJäsenyyden tarkistaminen: list vai set
Valitsemanne tietorakenne vaikuttaa nopeuteen. in-operaattorin käyttö listalla on O(n), mutta setillä O(1). Listan muuttaminen setiksi ennen toistuvia hakuja on yleinen tapa nopeuttaa ohjelmaa.
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]Dictin läpikäynti: avaimet, arvot ja alkiot
Käykää dict läpi käyttämällä metodeja .keys(), .values() tai .items(). Älkää koskaan poistako avaimia silmukan aikana — kerätkää ne ensin listaan ja poistakaa vasta sen jälkeen. Tutustukaa koodiin.
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: hashable-setit
frozenset on muuttumaton set, joten sitä voi käyttää dictin avaimena tai säilyttää toisen setin sisällä. Se on kätevä anagrammien ryhmittelyssä kirjainten joukon perusteella, kun järjestyksellä ei ole väliä.
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 comprehensionit muunnoksiin
Dict comprehensionit rakentavat kuvauksen yhdellä rivillä: {k: v for ...}. Ne sopivat erinomaisesti dictin kääntämiseen tai parien suodattamiseen. Huomioikaa, että kääntäminen edellyttää arvojen olevan yksikäsitteisiä. Tutustukaa koodiin.
# 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}Pisin peräkkäinen lukujono
Setit ratkaisevat pisimmän peräkkäisen lukujonon etsimisen O(n)-ajassa: lisätkää kaikki luvut setiin ja laskekaa eteenpäin vain jokaisesta luvusta, jonka edeltäjä puuttuu. Järjestämistä ei tarvita.
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)Pikatarkistus
Pikatarkistus — katsotaan, kuinka hyvin tämän oppitunnin dict- ja set-ideat jäivät mieleen. Luottakaa tässä vaistoihinne. 🎯
Oppitunnin kertaus
Kertaus: dictit tarjoavat O(1)-haut laskemiseen ja ryhmittelyyn, Counter ja defaultdict vähentävät toistuvaa peruskoodia, ja setit muuttavat O(n)-läpikäynnit O(1)-tarkistuksiksi.
Opi Python tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 30
- Oppitunnit
- 120
Usein kysytyt kysymykset
Onko oppitunti ”Sanakirjat ja joukot Pythonissa” ilmainen?
Kyllä – oppitunnin ”Sanakirjat ja joukot Pythonissa” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko DSA Interview Prep-kurssin, päivitä CoddyKit PROhon. DSA Interview Prep-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Sanakirjat ja joukot Pythonissa”?
Tutustukaa dict- ja set-rakenteiden luomiseen, jäsenyyden testaamiseen sekä yleisiin malleihin, kuten frekvenssien laskemiseen collections.Counterilla. Harjoittelet DSA Interview Prep-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni DSA Interview Prep-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin DSA Interview Prep-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.
Kuinka kauan ”Sanakirjat ja joukot Pythonissa”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä DSA Interview Prep-oppitunnilla?
Kyllä. Jokainen DSA Interview Prep-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Listat, monikot ja viipalointi
- Sanakirjat ja joukot Pythonissa
- Comprehension-rakenteet ja sisäänrakennetut funktiot
- Funktiot, sulkeumat ja lambda