Вызов значений из словаря Python: методы .get() и .setdefault() вместо квадратных скобок
2026-02-21 07:41 Diff

#статьи

  • 19 авг 2021
  • 0

Вы всё ещё пользуетесь квадратными скобками? Тогда мы идём к вам.

Dana Moskvina / Skillbox Media

Кандидат философских наук, специалист по математическому моделированию. Пишет про Data Science, AI и программирование на Python.

Словарь в Python — это набор из пар «ключ: значение». Основные его свойства:

  • В каждой паре ключ (key) указывает на значение (value).
  • Ключи уникальны, повторов нет. Значения могут быть одинаковыми.
  • В отличие от списка или кортежа, словарь не упорядочен, то есть нельзя указать, какая пара в нём идёт первой, а какая последней.

Ключ от значения отделяется двоеточием, а пары разделяются запятыми. Весь словарь заключён в фигурные скобки {}.

author = { "first_name": "Виктор", "last_name": "Пелевин", "username": "dao1962" }

В качест��е ключей можно использовать строки, числа (целые и дробные), кортежи. Нельзя использовать списки, словари и другие изменяемые типы данных. В качестве значений можно использовать любой тип данных.

Работа со словарём подразумевает вызов хранимых в нём значений по ключу. И здесь есть несколько способов.

Первый способ, который узнают начинающие питонисты, — это вызов значений с помощью квадратных скобок. Пишется имя словаря, а за ним в квадратных скобках идёт ключ. Если Python находит такой ключ в словаре, то возвращает соответствующее ему значение.

author = { "first_name": "Виктор", "last_name": "Пелевин", "username": "dao1962" } author['username'] >>> 'dao1962' author['age'] >>> Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> author['age'] KeyError: 'age'

Если же такого ключа нет, то вернётся исключение KeyError. И это, надо сказать, довольно неприятно, особенно в случае с объёмными и часто изменяющимися данными.

Путей решения этой проблемы несколько:

  • Использовать конструкцию try / except (схожую с условным оператором if / else), которая будет обрабатывать KeyError и возвращать не само исключение, а что-то более удобное для работы — например, сообщение.
try: author['age'] except KeyError: print('Такого ключа нет') >>> 'Такого ключа нет'
  • Использовать встроенную библиотеку collections, а конкретно структуру defaultdict из неё — расширение над обычным словарём, позволяющее устанавливать значения по умолчанию для запрошенных несуществующих ключей.

Но есть и третий способ, даже два. Словарь в Python поддерживает встроенные методы вызова значения .get() и .setdefault(), которые позволяют обойтись без обработки исключений и импорта библиотек. Их мы и рассмотрим.

Пожалуй, самый безопасный способ вызова значений из словаря. У него два параметра:

  • Первый (обязательный) — ключ, значение которого мы хотим вызвать.
  • Второй (опциональный) — значение, которое вернёт метод, если ключа в словаре не существует. По умолчанию оно равно None — его метод и вернёт.
author.get('first_name') >>> 'Виктор' author.get('age') # ничего не происходит print(author.get('age')) # поэтому используем print >>> None author.get('age', 'Такого ключа в словаре нет') >>> 'Такого ключа в словаре нет'

Если ключ в словаре существует, то вызов .get() ничем не отличается от вызова с помощью квадратных скобок. Если же ключа нет, то метод возвращает второй параметр — либо None, либо, например, строку с сообщением.

И не надо обрабатывать ошибки и исключения.

Иногда может понадобиться не только защита от ошибки KeyError, но и исправление самого словаря. Для этого применяется метод .setdefault(), который по синтаксису и выводу похож на .get() и принимает те же два параметра: вызываемый ключ и его значение по умолчанию.

Обнаружив, что вызываемого ключа не существует, метод .setdefault():

  • сам создаёт ключ;
  • создаёт к нему в пару значение, заданное вами (по умолчанию — None);
  • добавляет получившуюся пару в словарь;
  • возвращает значение.

Если вы не указали второй параметр, он вернёт None, то есть ничего.

author.setdefault('middle_name') # None - значит ничего author # добавился ключ 'middle_name' со значением None >>> { 'first_name': 'Виктор', 'last_name': 'Пелевин', 'username': 'dao1962', 'middle_name': None, } author.setdefault('book', 'Омон Ра') >>> 'Омон Ра' author >>> { 'first_name': 'Виктор', 'last_name': 'Пелевин', 'username': 'dao1962', 'middle_name': None, 'book': 'Омон Ра', }

Обратите внимание, что этот метод не меняет значения у существующих ключей.

author.setdefault('first_name', 'Владимир') >>> 'Виктор'

Если вам не нужно изменять сам словарь, то пользуйтесь вызовом с помощью .get(). Если запрашиваемые ключи и значения отсутствуют в словаре и их нужно туда добавить, то подойдёт метод .setdefault(). Оба этих метода надёжнее, чем «школьный» вызов с помощью квадратных скобок.

Хотите узнать больше? На курсе «Профессия Python-разработчик» вы познакомитесь со всеми методами и инструментами Python, которые необходимы программисту для успешного трудоустройства. Приходите!

Python для всех

Вы освоите Python на практике и создадите проекты для портфолио — телеграм-бот, веб-парсер и сайт с нуля. А ещё получите готовый план выхода на удалёнку и фриланс. Спикер — руководитель отдела разработки в «Сбере».

Пройти бесплатно

Бесплатный курс по разработке на Python ➞
Пройдите бесплатный курс по Python и создайте с нуля телеграм-бот, веб-парсер и сайт. Спикер — руководитель отдела разработки в «Сбере». Пройти курс