
Словарь в Python – это изменяемый тип данных, представляющий собой коллекцию пар ключ–значение. Он реализован как хеш-таблица, что обеспечивает быстрый доступ к данным по ключу. Ключи должны быть хешируемыми объектами (например, строки, числа, кортежи), а значения могут быть любыми типами данных.
Создать словарь можно несколькими способами. Наиболее читаемый – через фигурные скобки: user = {«name»: «Анна», «age»: 28}. Альтернатива – функция dict(), особенно полезна при создании из пар: dict([(«name», «Анна»), («age», 28)]).
Добавление и обновление выполняется через присваивание: user[«city»] = «Москва». Если ключ существует, значение перезапишется. Удаление – через del: del user[«age»]. Метод pop() возвращает значение и удаляет ключ: user.pop(«name»).
Для перебора всех элементов применяются методы items(), keys() и values(). Например: for key, value in user.items():. Это позволяет удобно обрабатывать содержимое словаря в цикле.
Чтобы избежать ошибки при обращении к несуществующему ключу, используйте get(): user.get(«email», «не указано»). Метод setdefault() задаёт значение по умолчанию, если ключ отсутствует.
Словари поддерживают вложенные структуры: значения могут быть другими словарями, списками или функциями. Это делает их удобным инструментом для хранения и обработки сложных данных, таких как JSON-объекты.
Создание словаря с нуля: синтаксис и способы объявления

Словарь в Python создаётся с помощью фигурных скобок {} или через функцию dict(). Пустой словарь создаётся так: my_dict = {} или my_dict = dict().
Чтобы сразу добавить пары ключ-значение, используют следующий синтаксис: user = {'name': 'Анна', 'age': 30}. Ключи могут быть строками, числами, кортежами (если они хешируемые), но не списками или другими изменяемыми типами.
При использовании dict() можно передать аргументы в виде именованных параметров: user = dict(name='Анна', age=30). Такой способ подходит, если все ключи – строки, подходящие под правила идентификаторов.
Также можно создать словарь из списка кортежей: pairs = [('a', 1), ('b', 2)]; d = dict(pairs). Это удобно при конвертации структур или извлечении данных из CSV и JSON.
Ещё один способ – через генератор словаря: squares = {x: x**2 for x in range(5)}. Такой подход позволяет гибко формировать содержимое на основе выражений.
При объявлении словаря важно помнить, что дублирующиеся ключи недопустимы – сохраняется последнее значение. Например: {'x': 1, 'x': 2} даст {'x': 2}.
Добавление, обновление и удаление пар ключ–значение
Чтобы добавить новую пару в словарь, используется синтаксис словарь[ключ] = значение. Если ключ уже существует, его значение будет обновлено. Например:
data = {}
data['имя'] = 'Андрей'
data['возраст'] = 30
При повторном присваивании значения ключу:
data['возраст'] = 31
значение по ключу 'возраст' заменяется на новое.
Метод update() позволяет изменить сразу несколько значений или добавить новые ключи:
data.update({'город': 'Москва', 'имя': 'Сергей'})
Ключ 'имя' будет перезаписан, 'город' добавлен.
Для удаления используется оператор del:
del data['город']
Если ключ отсутствует, возникает исключение KeyError. Чтобы избежать ошибки, можно применять метод pop() с указанием значения по умолчанию:
data.pop('телефон', None)
Метод pop() удаляет элемент и возвращает его значение. Без второго аргумента вызовет KeyError, если ключ не найден.
Метод clear() полностью очищает словарь:
data.clear()
После вызова clear() словарь остаётся, но становится пустым.
Обработка отсутствующих ключей: get(), setdefault() и try-except
Метод get() позволяет безопасно получить значение по ключу. Если ключ отсутствует, возвращается указанное значение по умолчанию:
данные = {"имя": "Андрей"}
результат = данные.get("возраст", 0) # вернёт 0, если "возраст" отсутствует
Метод setdefault() не только возвращает значение по ключу, но и вставляет ключ со значением по умолчанию, если он отсутствует. Это удобно для инициализации вложенных структур:
результаты = {}
результаты.setdefault("оценки", []).append(5)
Использование try-except уместно, когда требуется реакция на исключение KeyError или выполнение дополнительных действий:
профиль = {"логин": "user123"}
try:
email = профиль["email"]
except KeyError:
email = "не указан"
get() предпочтительнее для простого получения значения. setdefault() удобен при работе с изменяемыми значениями. try-except стоит применять, если необходимо перехватывать исключения и выполнять обработку вне логики словаря.
Перебор элементов словаря: ключи, значения и пары
Для перебора содержимого словаря используются методы .keys(), .values() и .items(). Каждый из них возвращает представление соответствующего типа данных, что удобно при итерации с помощью цикла for.
- Ключи: метод
dict.keys()возвращает итерируемое представление всех ключей. Используется, если необходимо получить доступ к значениям через обращение по ключу.
data = {'a': 1, 'b': 2, 'c': 3}
for key in data.keys():
print(key, data[key])
- Значения: метод
dict.values()используется, когда интересуют только значения, без необходимости знать соответствующие ключи.
for value in data.values():
print(value)
- Пары: метод
dict.items()– оптимальный способ получить и ключ, и значение одновременно. Возвращает кортежи(key, value).
for key, value in data.items():
print(f'{key} → {value}')
Если нужен индекс при переборе, используется enumerate() в сочетании с .items():
for i, (key, value) in enumerate(data.items()):
print(f'{i}: {key} = {value}')
Словари в Python не гарантировали порядок до версии 3.7. С Python 3.7 порядок вставки сохраняется, и это можно использовать при итерациях.
Для фильтрации в процессе перебора рекомендуется использовать генераторы или условные выражения:
for key, value in data.items():
if value % 2 == 0:
print(key)
Использование вложенных словарей для хранения структурированных данных

Вложенные словари позволяют представлять иерархические структуры, где каждый уровень содержит логически связанные элементы. Например, при хранении данных о студентах можно использовать следующую конструкцию:
students = {
"Иванов": {"возраст": 21, "группа": "Б1", "оценки": {"математика": 5, "физика": 4}},
"Петров": {"возраст": 22, "группа": "Б2", "оценки": {"математика": 3, "физика": 5}}
}
Чтобы получить доступ к оценке Петрова по физике, используется цепочка ключей: students["Петров"]["оценки"]["физика"]. Это упрощает извлечение данных по конкретным критериям без необходимости использовать громоздкие структуры или внешние библиотеки.
Добавление нового студента происходит через прямое присваивание:
students["Сидоров"] = {"возраст": 20, "группа": "Б1", "оценки": {"математика": 4, "физика": 4}}
Для обхода всех студентов и их предметов удобно использовать вложенные циклы:
for name, info in students.items():
print(f"{name}, группа {info['группа']}")
for subject, grade in info["оценки"].items():
print(f" {subject}: {grade}")
Изменение вложенных данных требует точного указания ключей. Например, чтобы изменить оценку Иванова по математике: students["Иванов"]["оценки"]["математика"] = 4.
При работе с вложенными структурами важно контролировать наличие ключей с помощью in или метода get() во избежание KeyError. Пример безопасного доступа:
math_grade = students.get("Смирнов", {}).get("оценки", {}).get("математика")
Вложенные словари особенно полезны при сериализации данных в JSON. Такая структура напрямую поддерживается функциями json.dumps() и json.loads(), что облегчает сохранение и загрузку информации.
Копирование, сравнение и очистка словарей

Для работы с данными в словарях Python предоставляет несколько методов копирования, сравнения и очистки. Эти операции полезны, когда необходимо создавать новые словари, сравнивать их или удалять все элементы.
Копирование словарей
Для копирования словаря можно использовать несколько методов:
copy(): создает поверхностную копию словаря, то есть копирует сам объект, но не его вложенные объекты.dict(): другой способ создания копии словаря. Поведение аналогично методуcopy().copy.deepcopy(): используется для создания глубокой копии словаря, включая вложенные объекты. Для этого нужно импортировать модульcopy.
Пример поверхностного копирования:
my_dict = {"a": 1, "b": 2}
copied_dict = my_dict.copy()
Пример глубокого копирования:
import copy
my_dict = {"a": 1, "b": {"x": 10}}
deep_copied_dict = copy.deepcopy(my_dict)
Сравнение словарей
Для сравнения двух словарей можно использовать операторы == и !=, которые проверяют, содержат ли словари одинаковые ключи и значения. Если все пары ключ-значение одинаковы, результат будет True, иначе – False.
dict1 = {"a": 1, "b": 2}
dict2 = {"a": 1, "b": 2}
dict3 = {"a": 1, "b": 3}
print(dict1 == dict2) # True
print(dict1 == dict3) # False
Важно помнить, что порядок ключей в словаре не влияет на результат сравнения.
Очистка словаря
Для удаления всех элементов из словаря используется метод clear(). Он оставляет сам объект словаря, но очищает его от данных.
my_dict = {"a": 1, "b": 2}
my_dict.clear()
print(my_dict) # {}
Этот метод полезен, когда нужно очистить словарь без его удаления из памяти.
