ЯдроКодаподготовка к экзаменам
Учебная платформа

Загружаем материалы

Подготавливаем материалы и навигацию по разделу.

Словари в Python: пары ключ-значение

Автор: · Обновлено

Словарь связывает уникальные ключи со значениями. Доступ выполняется по ключу, а не по позиции. Присваивание существующему ключу заменяет значение, новому — добавляет пару. Порядок вставки сохраняется, но смысл словаря заключается именно в отображении ключ → значение.

Частоты слов

words = ['кот', 'пёс', 'кот', 'кот']
counts = {}

for word in words:
    counts[word] = counts.get(word, 0) + 1

print(counts)

Ожидаемый результат:

{'кот': 3, 'пёс': 1}

Метод get возвращает текущее значение, а для отсутствующего ключа — переданный ноль. После прибавления единицы результат сохраняется под тем же ключом.

Безопасный доступ

Выражение counts['лиса'] вызовет KeyError. Если отсутствие допустимо, используйте get или проверку key in counts. Но get может скрыть опечатку в обязательном ключе, поэтому способ выбирают по смыслу данных.

При переборе for key in dictionary выдаются ключи. Метод items() даёт пары key, value, values() — только значения. Ключи должны быть хешируемыми: строка или число подходит, список — нет. Не изменяйте размер словаря во время прямого перебора его ключей; при необходимости перебирайте list(dictionary).

Телефонная книга

Создайте словарь из трёх имён и номеров. Прочитайте имя и выведите номер либо «не найдено». Измените номер одного человека и добавьте нового. Затем пройдите по items и напечатайте все пары. Проверьте существующий ключ, отсутствующий и ключ с другим регистром. Объясните, почему 'Анна' и 'анна' различаются и где уместна нормализация lower.

Структура записи в словаре

Сохраните данные одного ученика как словарь с полями name, scores и active. Выведите средний балл, затем обновите active и добавьте новое поле. Проверьте обязательные ключи до вычисления и сравните доступ через квадратные скобки с get. После этого создайте словарь учеников, где внешний ключ — идентификатор, а значение — запись. Найдите ученика по идентификатору без полного перебора. Не используйте изменяемый список как ключ; объясните, почему ключ должен иметь стабильный хеш. Получившаяся модель должна отделять имя поля от его значения.

Практикум: учёт запасов по ключу

Создайте словарь остатков {"тетрадь": 12, "ручка": 8}. Обработайте продажу: проверьте наличие ключа и достаточное количество, затем уменьшите остаток. Протестируйте неизвестный товар, продажу ровно всего остатка, превышение и ноль. Сравните обращение через квадратные скобки с get, указав, где отсутствие должно считаться ошибкой, а где допустим ноль. Переберите пары через items и выведите только товары, которые нужно заказать.

Контрольная точка

Почему выражение stock.get(name, 0) может скрыть опечатку в названии? Определите, различает ли предметная модель неизвестный товар и известный товар с нулевым остатком.

Частые вопросы

Может ли ключом словаря быть список?

Нет, ключ должен быть хешируемым и неизменяемым по смыслу. Строки, числа и подходящие кортежи обычно допустимы; список изменяем и потому не может стабильно определять позицию в словаре.

Источники