defaultdict python 3 что это: полное объяснение и примеры
defaultdict в Python 3 - это класс из модуля collections. Он представляет собой словарь с дополнительной особенностью: если вы обращаетесь к несуществующему ключу, вместо ошибки создается новая запись с заданным значением по умолчанию.
Пример:
from collections import defaultdict
d = defaultdict(int) # Создаем defaultdict с значением по умолчанию типа int
d['a'] += 1 # Если 'a' не существует, создается новая запись с значением 0, и затем увеличивается на 1
print(d['a']) # Вывод: 1
# Можно также указать другое значение по умолчанию
d = defaultdict(str) # Создаем defaultdict с значением по умолчанию типа str
print(d['b']) # Вывод: ""
# Можно даже использовать функцию, чтобы определить значение по умолчанию
d = defaultdict(lambda: "Неизвестно")
print(d['c']) # Вывод: "Неизвестно"
Детальный ответ
defaultdict Python 3 - что это?
defaultdict является одним из классов, предоставляемых модулем collections в Python 3. Он представляет собой подкласс обычного словаря dict с расширенными функциональными возможностями.
Основное отличие defaultdict заключается в том, что он позволяет нам указать функцию-фабрику (default factory), которая будет автоматически создавать значения для ключей, если эти ключи отсутствуют в словаре. Это очень удобно, поскольку позволяет избежать ошибки KeyError в случаях, когда пытаемся получить значение по несуществующему ключу.
Давайте посмотрим на пример кода, чтобы увидеть, как можно использовать defaultdict:
from collections import defaultdict
# Создаем defaultdict с указанием функции-фабрики
fruit_count = defaultdict(int)
# Добавляем несколько значений в словарь
fruit_count['яблоко'] = 3
fruit_count['апельсин'] = 5
print(fruit_count['яблоко']) # Output: 3
print(fruit_count['апельсин']) # Output: 5
print(fruit_count['банан']) # Output: 0 (значение создано с помощью функции-фабрики int())
В приведенном выше примере мы создали defaultdict с помощью функции-фабрики int(), которая возвращает значение 0. Это означает, что если мы обратимся к несуществующему ключу (например, 'банан'), defaultdict автоматически создаст значение 0 для этого ключа.
Таким образом, при выполнении fruit_count['банан'] словарь fruit_count автоматически создает новую пару ключ-значение с ключом 'банан' и значением 0.
Использование других функций-фабрик
Вместо int() функцию-фабрику в defaultdict можно заменить на другую функцию по вашему выбору. Например, если мы хотим использовать список в качестве значения по умолчанию, мы можем указать функцию-фабрику list():
from collections import defaultdict
# Создаем defaultdict с указанием функции-фабрики list()
student_scores = defaultdict(list)
# Добавляем несколько значений в словарь
student_scores['Иван'] = [85, 90, 92]
student_scores['Мария'] = [78, 80, 88]
print(student_scores['Иван']) # Output: [85, 90, 92]
print(student_scores['Мария']) # Output: [78, 80, 88]
print(student_scores['Алексей']) # Output: [] (значение создано с помощью функции-фабрики list())
В этом примере мы использовали функцию-фабрику list() для создания пустого списка в случае, если ключ отсутствует в словаре. Даже если у студента нет оценок, список будет автоматически создан. Для студента 'Алексей' в результате выполнения student_scores['Алексей'] будет выведен пустой список [].
Заключение
Defaultdict - это полезный класс, который расширяет функциональность стандартного словаря, позволяя указать функцию-фабрику для создания значений по умолчанию. Это помогает избежать ошибок KeyError и упрощает работу со словарями, особенно в случаях, когда требуется хранить значения определенного типа (например, список или число).