Вызов значений из словаря Python: методы .get() и .setdefault() вместо квадратных скобок
Вы всё ещё пользуетесь квадратными скобками? Тогда мы идём к вам.
Dana Moskvina / Skillbox Media
Словарь в Python — это набор из пар «ключ: значение». Основные его свойства:
- В каждой паре ключ (key) указывает на значение (value).
- Ключи уникальны, повторов нет. Значения могут быть одинаковыми.
- В отличие от списка или кортежа, словарь не упорядочен, то есть нельзя указать, какая пара в нём идёт первой, а какая последней.
Ключ от значения отделяется двоеточием, а пары разделяются запятыми. Весь словарь заключён в фигурные скобки {}.
В качестве ключей можно использовать строки, числа (целые и дробные), кортежи. Нельзя использовать списки, словари и другие изменяемые типы данных. В качестве значений можно использовать любой тип данных.
Работа со словарём подразумевает вызов хранимых в нём значений по ключу. И здесь есть несколько способов.
Обычный (не слишком хороший) способ
Первый способ, который узнают начинающие питонисты, — это вызов значений с помощью квадратных скобок. Пишется имя словаря, а за ним в квадратных скобках идёт ключ. Если Python находит такой ключ в словаре, то возвращает соответствующее ему значение.
Если же такого ключа нет, то вернётся исключение KeyError. И это, надо сказать, довольно неприятно, особенно в случае с объёмными и часто изменяющимися данными.
Путей решения этой проблемы несколько:
- Использовать конструкцию try / except (схожую с условным оператором if / else), которая будет обрабатывать KeyError и возвращать не само исключение, а что-то более удобное для работы — например, сообщение.
- Использовать встроенную библиотеку collections, а конкретно структуру defaultdict из неё — расширение над обычным словарём, позволяющее устанавливать значения по умолчанию для запрошенных несуществующих ключей.
Но есть и третий способ, даже два. Словарь в Python поддерживает встроенные методы вызова значения .get() и .setdefault(), которые позволяют обойтись без обработки исключений и импорта библиотек. Их мы и рассмотрим.
Вызов с помощью .get()
Пожалуй, самый безопасный способ вызова значений из словаря. У него два параметра:
- Первый (обязательный) — ключ, значение которого мы хотим вызвать.
- Второй (опциональный) — значение, которое вернёт метод, если ключа в словаре не существует. По умолчанию оно равно None — его метод и вернёт.
Если ключ в словаре существует, то вызов .get() ничем не отличается от вызова с помощью квадратных скобок. Если же ключа нет, то метод возвращает второй параметр — либо None, либо, например, строку с сообщением.
И не надо обрабатывать ошибки и исключения.
Вызов с помощью .setdefault()
Иногда может понадобиться не только защита от ошибки KeyError, но и исправление самого словаря. Для этого применяется метод .setdefault(), который по синтаксису и выводу похож на .get() и принимает те же два параметра: вызываемый ключ и его значение по умолчанию.
Обнаружив, что вызываемого ключа не существует, метод .setdefault():
- сам создаёт ключ;
- создаёт к нему в пару значение, заданное вами (по умолчанию — None);
- добавляет получившуюся пару в словарь;
- возвращает значение.
Если вы не указали второй параметр, он вернёт None, то есть ничего.
Обратите внимание, что этот метод не меняет значения у существующих ключей.
Что в итоге
Если вам не нужно изменять сам словарь, то пользуйтесь вызовом с помощью .get(). Если запрашиваемые ключи и значения отсутствуют в словаре и их нужно туда добавить, то подойдёт метод .setdefault(). Оба этих метода надёжнее, чем «школьный» вызов с помощью квадратных скобок.
Хотите узнать больше? На курсе «Профессия Python-разработчик» вы познакомитесь со всеми методами и инструментами Python, которые необходимы программисту для успешного трудоустройства. Приходите!