Словари в Python: пошаговый разбор для начинающих
За полчаса разберётесь, как создавать словари, доставать значения без ошибок KeyError, перебирать пары ключ-значение и объединять словари. Всё на Python 3.10 и новее.

К концу разбора вы будете уверенно создавать словари, доставать значения без падений с KeyError, перебирать пары ключ-значение, обновлять и объединять словари. Времени на прохождение всех шагов — около 30 минут, если сразу вводить примеры в интерпретаторе. Всё написано для Python 3.10 и новее; отдельно отмечу места, где синтаксис отличался в старых версиях.
Что нужно до начала
Понадобится установленный Python 3.10 или свежее. Проверьте версию в терминале:
python --versionЕсли выводится Python 3.10.x или больше — всё готово. На части систем интерпретатор вызывается как python3. Дальше все примеры можно вводить прямо в интерактивной оболочке: наберите python и нажмите Enter, появится приглашение >>>.
Словарь (dict) хранит данные парами: ключ и связанное с ним значение. Ключ должен быть неизменяемым — строка, число, кортеж. Значением может быть что угодно.
Шаг 1. Создать словарь
Самый частый способ — фигурные скобки с парами через двоеточие:
user = {"name": "Анна", "age": 30, "city": "Казань"}
print(user)Должна вывестись строка вида {'name': 'Анна', 'age': 30, 'city': 'Казань'}. Пустой словарь создаётся так:
empty = {}
print(type(empty))Выведется <class 'dict'>. Обратите внимание: {} — это именно пустой словарь, а не множество.
Начиная с Python 3.7 порядок сохраняется
Словарь запоминает порядок, в котором вы добавляли ключи. Раньше (до 3.7) полагаться на порядок было нельзя. Сейчас перебор всегда пойдёт от первого добавленного ключа к последнему.
Шаг 2. Получить значение по ключу
Прямое обращение через квадратные скобки:
user = {"name": "Анна", "age": 30}
print(user["name"])Выведется Анна. Но если ключа нет, программа упадёт:
print(user["email"]) # KeyError: 'email'Вы увидите KeyError: 'email'. Чтобы избежать падения, используйте метод get — он вернёт None или заданное значение по умолчанию:
print(user.get("email")) # None
print(user.get("email", "нет")) # нетПростое правило:user["key"]— когда вы уверены, что ключ есть и его отсутствие означает ошибку в логике.user.get("key")— когда ключа может не быть и это нормально.
Шаг 3. Добавить и изменить значение
Присваивание по несуществующему ключу добавляет пару, по существующему — перезаписывает:
user = {"name": "Анна"}
user["age"] = 30 # добавили
user["name"] = "Инна" # перезаписали
print(user)Выведется {'name': 'Инна', 'age': 30}. Метод update добавляет сразу несколько пар из другого словаря:
user.update({"city": "Пермь", "age": 31})
print(user)Ключ age перезапишется на 31, city добавится.
Шаг 4. Удалить пару
Три рабочих способа, каждый под свою ситуацию:
del user["age"]— удаляет пару; если ключа нет, будетKeyError.value = user.pop("age")— удаляет и возвращает значение; можно задать значение по умолчанию:user.pop("age", None), тогда без ключа ошибки не будет.user.clear()— очищает словарь целиком, останется{}.
user = {"name": "Анна", "age": 30}
age = user.pop("age")
print(age) # 30
print(user) # {'name': 'Анна'}Шаг 5. Проверить наличие ключа
Оператор in проверяет именно ключи, а не значения:
user = {"name": "Анна", "age": 30}
print("name" in user) # True
print("Анна" in user) # False — это значение, а не ключЭто правильный способ обезопасить обращение перед тем, как лезть в словарь квадратными скобками.
Шаг 6. Перебрать словарь
Три метода дают три взгляда на содержимое:
| Метод | Что перебирает |
|---|---|
for key in user: | ключи (то же, что user.keys()) |
user.values() | значения |
user.items() | пары (ключ, значение) |
Самый частый вариант — перебор пар:
user = {"name": "Анна", "age": 30, "city": "Казань"}
for key, value in user.items():
print(f"{key}: {value}")Выведется три строки: name: Анна, age: 30, city: Казань. Важно: не удаляйте ключи из словаря прямо во время такого перебора — получите RuntimeError: dictionary changed size during iteration. Если нужно удалить по условию, соберите ключи заранее: for key in list(user.keys()):.
Шаг 7. Объединить два словаря
С Python 3.9 появился оператор |:
defaults = {"theme": "light", "lang": "ru"}
custom = {"lang": "en"}
result = defaults | custom
print(result) # {'theme': 'light', 'lang': 'en'}При совпадении ключей побеждает правый словарь. Если у вас Python 3.8 или старше, оператора | нет — используйте распаковку: result = {**defaults, **custom}. Она работает начиная с 3.5.
Если не получилось
- TypeError: unhashable type: 'list' — вы попытались сделать ключом список. Ключи должны быть неизменяемыми: строка, число, кортеж. Замените список на кортеж.
- KeyError: '...' — обращаетесь по несуществующему ключу через квадратные скобки. Проверьте ключ через
inили используйтеget. - AttributeError: 'dict' object has no attribute 'append' — путаете словарь со списком. У словаря нет
append; добавляют присваиваниемd[key] = value. - SyntaxError при объявлении — забыли двоеточие между ключом и значением или поставили запятую вместо двоеточия.
- Оператор
|выдал TypeError: unsupported operand type — у вас Python старше 3.9. Замените на{**a, **b}.
Что делать дальше
Разберитесь с генераторами словарей — компактной записью вида {k: v for k, v in pairs}: это следующая по частоте конструкция после базовых операций. Дальше посмотрите модуль collections: defaultdict избавляет от проверок на существование ключа, а Counter считает частоты в одну строку. Вложенные словари (значение — тоже словарь) — отдельная тема, здесь мы разбирали только плоскую структуру.
Разбор научной статьи: Сложный текст — понятным языком, с терминами
Спросить за 12 ₽Источники: Python docs — Mapping Types (dict), Python docs — Dictionaries (tutorial)
Частые вопросы
А если у меня Python 3.8, всё сработает?
Чем словарь отличается от списка?
Можно ли сделать ключом список или другой словарь?
Почему при удалении ключа во время цикла возникает ошибка?
Что вернёт get, если ключа нет и я не задал значение по умолчанию?
Сохранится ли порядок ключей, в котором я их добавлял?
Материал носит информационный характер и подготовлен редакцией «Агентуры». Он не является офертой, рекламой или индивидуальной консультацией. Упомянутые продукты, компании и торговые знаки принадлежат их правообладателям. Перед принятием решений, влекущих юридические или финансовые последствия, обратитесь к профильному специалисту.