0Pricing
DSA Interview Prep · Урок

Словари и множества в Python

Изучите создание словарей и множеств, проверку принадлежности и распространённые приёмы, например подсчёт частот с помощью collections.Counter

«Словари и множества в Python» — бесплатный урок DSA Interview Prep на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DSA Interview Prep, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DSA Interview Prep содержит 4 уроков всего.

Словари Python: хранилища пар «ключ—значение»

Словарь Python сопоставляет ключи со значениями, обеспечивая в среднем поиск, вставку и удаление за O(1). Это основа задач на две суммы, проверку анаграмм и подсчёт частот. В коде показано, как это работает.

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}

Безопасный поиск с помощью .get()

Чтение отсутствующего ключа через d[key] приводит к ошибке KeyError. Используйте d.get(key, default), чтобы вместо этого вернуть резервное значение, — это безопасная привычка, помогающая избежать неожиданных ошибок во время выполнения.

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 для более чистой группировки

defaultdict(list) автоматически создаёт пустой список для каждого нового ключа, поэтому в задачах на группировку исчезает шаблонный код. defaultdict(int) начинает отсчёт для каждого ключа с 0, что удобно для подсчёта.

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: быстрые таблицы частот

Counter — это словарь, предназначенный для подсчёта: передайте ему любую итерируемую последовательность и мгновенно получите таблицу частот. most_common(k) возвращает k наиболее частых элементов. В коде показана проверка анаграммы.

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'))  # True

Множества Python: неупорядоченные коллекции уникальных элементов

Множество хранит уникальные элементы и проверяет принадлежность за O(1). Используйте {1, 2, 3} или set(iterable), но {} создаёт словарь, поэтому для пустого множества используйте set(). Множества отлично подходят для обнаружения дубликатов.

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)

Операции над множествами на собеседованиях

Множества поддерживают математические операции: | — объединение, & — пересечение, - — разность, ^ — симметрическая разность. С их помощью задачи об «общих элементах» решаются в одну строку.

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 diff

Проверка принадлежности: список и множество

Выбор структуры влияет на скорость. Проверка in для списка занимает O(n), а для множества — O(1). Преобразование списка в множество перед многократными проверками — распространённый способ ускорить программу.

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]

Перебор словарей: ключи, значения и элементы

Перебирайте словарь с помощью .keys(), .values() или .items(). Никогда не удаляйте ключи посреди цикла — сначала соберите их в список, а затем удалите после завершения цикла. См. код.

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: хешируемые множества

frozenset — это неизменяемое множество, поэтому оно может быть ключом словаря или находиться внутри другого множества. Это удобно для группировки анаграмм по набору букв, когда порядок не имеет значения.

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']]

Включения словаря для преобразований

Включения словаря создают отображение в одну строку: {k: v for ...}. Они отлично подходят для инвертирования словаря или фильтрации пар. Обратите внимание: инвертирование предполагает, что значения уникальны. См. код.

# 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}

Самая длинная последовательность подряд идущих чисел

Множества решают задачу о самой длинной последовательности подряд идущих чисел за O(n): поместите все числа в множество, а затем начинайте подсчёт только с тех чисел, у которых отсутствует предшественник. Сортировка не требуется.

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)

Быстрая проверка

Быстрая проверка — проверьте, насколько хорошо Вы усвоили идеи о словарях и множествах из этого урока. Доверьтесь своей интуиции. 🎯

Итоги урока

Итоги: словари обеспечивают поиск за O(1) при подсчёте и группировке, Counter и defaultdict сокращают объём шаблонного кода, а множества превращают сканирование за O(n) в проверки за O(1).

Часто задаваемые вопросы

Урок «Словари и множества в Python» бесплатный?

Да — полный текст урока «Словари и множества в Python» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DSA Interview Prep, подпишись на CoddyKit PRO. Курс DSA Interview Prep содержит 4 уроков всего.

Чему я научусь в уроке «Словари и множества в Python»?

Изучите создание словарей и множеств, проверку принадлежности и распространённые приёмы, например подсчёт частот с помощью collections.Counter Ты практикуешь DSA Interview Prep с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать DSA Interview Prep?

Предыдущий опыт не требуется. DSA Interview Prep на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Словари и множества в Python»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке DSA Interview Prep?

Да. Каждый урок DSA Interview Prep включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Списки, кортежи и срезы
  2. Словари и множества в Python
  3. Генераторы коллекций и встроенные функции
  4. Функции, замыкания и лямбда-выражения
← Назад к DSA Interview Prep