Что делает метод `setdefault()` у словаря?

Метод setdefault(key, default) словаря проверяет наличие ключа key.
  • Если ключ присутствует, возвращает значение этого ключа.
  • Если ключ отсутствует, добавляет ключ в словарь со значением default и возвращает default.
Он позволяет избежать ошибок KeyError и упрощает код при работе с отсутствующими ключами.

Метод setdefault() у словаря в Python используется для получения значения ключа, но с дополнительной функциональностью: если ключ отсутствует в словаре, он будет добавлен с указанным значением по умолчанию.

Основные действия:

  1. Проверяет наличие ключа: Сначала setdefault(key, default) проверяет, присутствует ли указанный key в словаре.
  2. Возвращает значение: Если ключ key уже существует в словаре, метод возвращает соответствующее ему значение. Это аналогично обычному обращению к словарю через dictionary[key].
  3. Добавляет ключ, если отсутствует: Если ключ key отсутствует в словаре, он добавляется в словарь, и ему присваивается значение default. После этого метод возвращает значение default.

Синтаксис:

dictionary.setdefault(key, default)

Параметры:

  • key: Ключ, наличие которого проверяется.
  • default: Значение, которое будет присвоено ключу, если он отсутствует в словаре. Если default не указан, то используется None.

Пример:


my_dict = {'a': 1, 'b': 2}

# Ключ 'a' уже существует, возвращает его значение. Словарь не меняется.
value_a = my_dict.setdefault('a', 10)
print(f"Значение 'a': {value_a}")  # Вывод: Значение 'a': 1
print(f"Словарь: {my_dict}")      # Вывод: Словарь: {'a': 1, 'b': 2}


# Ключ 'c' отсутствует, добавляет его со значением 3.
value_c = my_dict.setdefault('c', 3)
print(f"Значение 'c': {value_c}")  # Вывод: Значение 'c': 3
print(f"Словарь: {my_dict}")      # Вывод: Словарь: {'a': 1, 'b': 2, 'c': 3}

# Ключ 'd' отсутствует и не указано значение по умолчанию, поэтому добавляется со значением None.
value_d = my_dict.setdefault('d')
print(f"Значение 'd': {value_d}") # Вывод: Значение 'd': None
print(f"Словарь: {my_dict}")      # Вывод: Словарь: {'a': 1, 'b': 2, 'c': 3, 'd': None}
  

Преимущества использования setdefault():

  • Компактность: Позволяет получить и установить значение по умолчанию в одной строке кода, что делает код более читаемым и лаконичным.
  • Эффективность: Предотвращает повторное выполнение кода. Например, если необходимо выполнить дорогостоящую операцию для вычисления значения по умолчанию, setdefault() выполнит ее только один раз, если ключ отсутствует.

Типичное использование:

setdefault() часто используется для инициализации словарей, где ключи представляют собой категории, а значения - списки элементов, принадлежащих к этим категориям. Это позволяет добавлять элементы в список только один раз, при первом обнаружении ключа.


data = [('a', 1), ('b', 2), ('a', 3), ('c', 4), ('b', 5)]
result = {}

for key, value in data:
  result.setdefault(key, []).append(value)

print(result)  # Вывод: {'a': [1, 3], 'b': [2, 5], 'c': [4]}
  
0