Słowniki i zbiory w Pythonie
Poznają Państwo tworzenie dict i set, sprawdzanie przynależności oraz typowe wzorce, takie jak zliczanie częstotliwości za pomocą collections.Counter.
Słowniki i zbiory w Pythonie to bezpłatna lekcja DSA Interview Prep na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej DSA Interview Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs DSA Interview Prep zawiera 4 lekcji w sumie.
Słowniki w Pythonie: mapowania klucz–wartość
Pythonowy dict odwzorowuje klucze na wartości, zapewniając średnio operacje wyszukiwania, wstawiania i usuwania w czasie O(1). Jest podstawą zadań two-sum, sprawdzania anagramów i zliczania częstości. Kod pokazuje, jak go używać.
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}Bezpieczne wyszukiwanie za pomocą .get()
Odczyt nieistniejącego klucza za pomocą d[key] kończy się błędem KeyError. Zamiast tego należy użyć d.get(key, default), aby zwrócić wartość zastępczą — to bezpieczny nawyk, który pozwala uniknąć nieoczekiwanych błędów w czasie działania programu.
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 do prostszego grupowania
defaultdict(list) automatycznie tworzy pustą listę dla każdego nowego klucza, dzięki czemu zadania związane z grupowaniem nie wymagają powtarzalnego kodu. defaultdict(int) rozpoczyna wartość każdego klucza od 0, co ułatwia zliczanie.
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: szybkie mapowanie częstości
Counter to słownik przeznaczony do zliczania: wystarczy przekazać mu dowolny obiekt iterowalny, aby natychmiast otrzymać mapowanie częstości. most_common(k) zwraca k najczęstszych elementów. Kod pokazuje sprawdzanie anagramu.
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')) # TrueZbiory w Pythonie: nieuporządkowane kolekcje unikatowych elementów
set przechowuje unikatowe elementy i zapewnia sprawdzanie przynależności w czasie O(1). Można użyć {1, 2, 3} lub set(iterable), ale {} tworzy słownik, dlatego pusty zbiór należy tworzyć za pomocą set(). Zbiory świetnie nadają się do wykrywania duplikatów.
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)Operacje na zbiorach na rozmowach rekrutacyjnych
Zbiory wykonują działania znane z matematyki: | oznacza sumę, & część wspólną, - różnicę, a ^ różnicę symetryczną. Pozwala to rozwiązywać pytania dotyczące „wspólnych elementów” w jednej linii.
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 diffSprawdzanie przynależności: lista a zbiór
Wybrana struktura danych wpływa na szybkość działania. Sprawdzanie operatora in dla listy zajmuje O(n), a dla zbioru O(1). Przekształcenie listy w zbiór przed wielokrotnym wyszukiwaniem to często stosowane przyspieszenie.
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]Iterowanie po słownikach: klucze, wartości i elementy
Po słowniku można przechodzić za pomocą .keys(), .values() lub .items(). Nigdy nie należy usuwać kluczy w trakcie pętli — najpierw trzeba zebrać je na liście, a dopiero potem usunąć. Szczegóły pokazano w kodzie.
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: haszowalne zbiory
frozenset to niezmienny zbiór, więc może być kluczem słownika lub znajdować się wewnątrz innego zbioru. Przydaje się do grupowania anagramów według ich zbioru liter, gdy kolejność nie ma znaczenia.
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']]Wyrażenia słownikowe do transformacji
Wyrażenia słownikowe tworzą mapowanie w jednej linii: {k: v for ...}. Doskonale nadają się do odwracania słownika lub filtrowania par. Uwaga: odwracanie zakłada, że wartości są unikatowe. Szczegóły pokazano w kodzie.
# 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}Najdłuższy spójny ciąg
Zbiory pozwalają znaleźć najdłuższy spójny ciąg w czasie O(n): należy umieścić wszystkie liczby w zbiorze, a następnie zliczać kolejne liczby tylko od tych, których poprzednika brakuje. Sortowanie nie jest potrzebne.
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)Szybki sprawdzian
Szybki sprawdzian — proszę przekonać się, jak dobrze utrwaliły się pomysły dotyczące słowników i zbiorów z tej lekcji. Proszę zaufać swojej intuicji. 🎯
Podsumowanie lekcji
Podsumowanie: słowniki zapewniają wyszukiwanie w czasie O(1), przydatne przy zliczaniu i grupowaniu, Counter i defaultdict ograniczają ilość powtarzalnego kodu, a zbiory zamieniają skanowanie w czasie O(n) na sprawdzanie w czasie O(1).
Często zadawane pytania
Czy lekcja „Słowniki i zbiory w Pythonie” jest bezpłatna?
Tak — pełny tekst „Słowniki i zbiory w Pythonie” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu DSA Interview Prep, przejdź na CoddyKit PRO. Kurs DSA Interview Prep zawiera 4 lekcji w sumie.
Co nauczysz się w „Słowniki i zbiory w Pythonie”?
Poznają Państwo tworzenie dict i set, sprawdzanie przynależności oraz typowe wzorce, takie jak zliczanie częstotliwości za pomocą collections.Counter. Ćwiczysz DSA Interview Prep z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć DSA Interview Prep?
Nie wymagamy żadnego doświadczenia. DSA Interview Prep w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Słowniki i zbiory w Pythonie”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji DSA Interview Prep?
Tak. Każda lekcja DSA Interview Prep zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Listy, krotki i wycinki
- Słowniki i zbiory w Pythonie
- Wyrażenia składane i funkcje wbudowane
- Funkcje, domknięcia i lambda