[Перевод] Функция setdefault() в Python: для чего нужна и как её использовать

Словари Python — мощные инструменты для работы с данными. Они поддерживают разные методы, но функция setdefault () выделяется способностью упрощать код и эффективно работать со значениями по умолчанию.

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

Разбираемся в функции setdefault ()

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

Синтаксис

Так выглядит синтаксис метода setdefault():

dict.setdefault(key, default=None)
  • key: выполняется поиск ключа в словаре.

  • default: если ключ не найден, задаётся и возвращается значение. Значение по умолчанию — None.

Возвращаемое значение

Метод setdefault() возвращает:

  • значение указанного ключа, существующего в словаре;

  • значение по умолчанию, если ключа в словаре нет.

Практические примеры

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

Пример 1. Базовый сценарий

Это пример базового использования метода setdefault().

# Creating a dictionary (создаём словарь)
fruits = {'apples': 5, 'oranges': 3}

# Using setdefault to get the value of an existing key (с помощью setdefault получаем значение существующего ключа)
apples_count = fruits.setdefault('apples', 10)
print('Apples:', apples_count)


# Using setdefault to add a new key with a default value (c помощью setdefault добавляем новый ключ со значением по умолчанию)
bananas_count = fruits.setdefault('bananas', 10)
print('Bananas:', bananas_count)


# Printing the updated dictionary (выводим обновлённый словарь)
print(fruits)

Результат:

2a2d03d1f59f4c04a8e49bbae2104555.jpg

Пример 2. Использование setdefault () в цикле

В этом примере с помощью метода setdefault() подсчитаем частотность элементов в списке.

# List of fruits (список фруктов)
fruit_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']

# Creating an empty dictionary to store the count (создаём пустой словарь для хранения подсчитанных значений)
fruit_count = {}

# Counting the frequency of each fruit (подсчитываем частотность каждого фрукта)
for fruit in fruit_list:
    fruit_count.setdefault(fruit, 0)
    fruit_count[fruit] += 1

# Printing the fruit count (выводим число подсчитанных фруктов)
print(fruit_count) 

Результат:

12cef5f9e7fbafc98b9940069ef5de77.jpg

Пример 3. Использование setdefault () с вложенными словарями

В этом примере мы с помощью метода setdefault() поработаем с вложенными словарями.

# Creating an empty dictionary to store student grades (создаём пустой словарь для хранения оценок студентов)
grades = {}

# List of student data (список сведений о студентах)
students = [
    ('Alice', 'Math', 'A'), 
    ('Bob', 'Math', 'B'),
    ('Alice', 'Science', 'A'),
    ('Bob', 'Science', 'C')
]

# Inserting student grades into the dictionary for name, subject, grade in students (вставляем оценки студентов в словарь: имя, предмет, оценка по каждому студенту):
    grades.setdefault(name, {})
    grades[name].setdefault(subject, grade)

# Printing the grades dictionary (выводим словарь с оценками студентов)
print(grades)

Результат:

f74fd14603a00cb093da26119221a1c7.jpg

Пример 4. Использование setdefault () для сложных структур данных

В этом примере воспользуемся методом setdefault(), чтобы сформировать словарь списков.

# List of student scores (список баллов студентов)
student_scores = [
    ('Alice', 85),
    ('Bob', 92), 
    ('Alice', 88), 
    ('Bob', 95)
]

# Creating an empty dictionary to store scores (создаём пустой словарь для хранения баллов)
scores = {}

# Inserting scores into the dictionary for name, score in student_scores (вставляем баллы в словарь: имя и балл по student_scores):
    scores.setdefault(name, []).append(score)

# Printing the scores dictionary (выводим словарь с баллами)
print(scores)

Результат:

671640f2589474389c150132399e5272.jpg

Что по итогу

Функция setdefault() — универсальный эффективный инструмент работы со значениями по умолчанию в словарях Python. Она упрощает код, уменьшая необходимость в явных проверках и условных выражениях при работе с ключами в словарях. Научившись работать с методом setdefault(), вы сможете писать более чистый код, характерный именно для Python, особенно в сценариях, где требуется ключ, который инициализируется значением по умолчанию.

Основные выводы:

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

  2. Подсчёт частоты. setdefault() можно использовать для эффективного подсчёта частоты элементов в списке.

  3. Вложенные словари. Метод setdefault() особенно полезен при работе с вложенными словарями, так как позволяет с лёгкостью обрабатывать сложные структуры данных.

  4. Создание сложных структур данных. Метод setdefault() можно использовать для формирования словарей списков или других сложных структур данных без явных проверок на наличие ключей.

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

Чтобы расти, нужно выйти из привычной зоны и сделать шаг к переменам. Можно изучить новое, начав с бесплатных занятий:

Или открыть перспективы с профессиональным обучением и переподготовкой:

© Habrahabr.ru