В Python словарь представляет собой набор пар ключ-значение, который позволяет нам эффективно извлекать значения на основе соответствующих им ключей. Однако, если вы попытаетесь получить доступ к несуществующему ключу в словаре, вы получите ошибку KeyError
. Вот где пригодится класс defaultdict
.
defaultdict
— это подкласс встроенного класса dict
, предоставляющий значение по умолчанию для несуществующих ключей. Это означает, что вы можете получить доступ к любому ключу в defaultdict
, не беспокоясь о получении KeyError
. В этом уроке мы узнаем, как использовать класс defaultdict
в Python.
Создание defaultdict
Создание defaultdict
похоже на создание обычного dict
. Вы можете передать фабричную функцию по умолчанию конструктору или создать пустой defaultdict
и указать фабричную функцию по умолчанию позже.
from collections import defaultdict # Creating a defaultdict with a default value of 0 dd = defaultdict(int) # Adding keys and values dd['a'] = 1 dd['b'] = 2 dd['c'] = 3 # Accessing existing and non-existing keys print(dd['a']) # Output: 1 print(dd['d']) # Output: 0
Это выведет:
1 0
В приведенном выше примере мы создали defaultdict
со значением по умолчанию 0. Затем мы добавили к нему три пары ключ-значение и получили доступ к двум ключам, одному существующему и другому несуществующему. Когда мы попытались получить доступ к несуществующему ключу, мы получили значение по умолчанию 0 вместо KeyError
.
Заводские функции по умолчанию
Значение по умолчанию для defaultdict
задается фабричной функцией, которая передается конструктору. Эта функция вызывается без аргументов и должна возвращать значение по умолчанию для несуществующего ключа. Вы можете использовать несколько встроенных фабричных функций, таких как int
, float
, list
, set
и dict
.
from collections import defaultdict # Creating a defaultdict with a default value of an empty list dd = defaultdict(list) # Adding values to lists dd['a'].append(1) dd['b'].append(2) dd['c'].append(3) # Accessing existing and non-existing keys print(dd['a']) # Output: [1] print(dd['d']) # Output: []
В приведенном выше примере мы создали defaultdict
со значением по умолчанию пустого списка. Затем мы добавили к нему три пары ключ-значение и добавили значения в списки, связанные с каждым ключом. Когда мы попытались получить доступ к несуществующему ключу, мы получили пустой список в качестве значения по умолчанию.
Вложенные слова по умолчанию
Вы также можете создать вложенный defaultdicts
, передав фабричную функцию defaultdict
конструктору другого defaultdict
. Это позволяет вам создать словарь словарей со значением по умолчанию для несуществующих ключей на обоих уровнях.
from collections import defaultdict # Creating a nested defaultdict with a default value of an empty dict dd = defaultdict(lambda: defaultdict(list)) # Adding values to nested dicts dd['a']['x'].append(1) dd['b']['y'].append(2) dd['c']['z'].append(3) # Accessing existing and non-existing keys print(dd['a']['x']) # Output: [1] print(dd['d']['w']) # Output: []
В приведенном выше примере мы создали вложенный defaultdict
со значением по умолчанию пустого словаря. Затем мы добавили значения во вложенные словари, связанные с каждым ключом. Когда мы попытались получить доступ к несуществующим ключам на обоих уровнях, мы получили значения по умолчанию пустой словарь и пустой список соответственно.
Использование фабричной функции defaultdict
В дополнение к встроенным фабричным функциям вы также можете создавать свои собственные фабричные функции, которые возвращают значение по умолчанию по вашему выбору. Например, вы можете создать фабричную функцию, которая возвращает строку «по умолчанию» в качестве значения по умолчанию.
from collections import defaultdict # Creating a defaultdict with a custom default factory function def my_default(): return "default" dd = defaultdict(my_default) # Adding values dd['a'] = 'apple' dd['b'] = 'banana' # Accessing existing and non-existing keys print(dd['a']) # Output: apple print(dd['c']) # Output: default
Это выведет:
apple default
В приведенном выше примере мы создали пользовательскую фабричную функцию по умолчанию my_default
, которая возвращает строку «по умолчанию». Затем мы создали defaultdict
с этой фабричной функцией и добавили к ней две пары ключ-значение. Когда мы попытались получить доступ к несуществующему ключу, мы получили значение по умолчанию «по умолчанию».
Учебное пособие по словарю Python: освоение структур данных пары «ключ-значение для эффективного программирования
Словарь Python — это встроенная структура данных, которая позволяет хранить данные и управлять ими в ключе- пары значений. Каждый…soumenatta.medium.com»
Преимущества использования defaultdict
Использование defaultdict
может сделать ваш код чище и кратче, устраняя необходимость в повторяющихся проверках на наличие ключей в словаре. Вместо того, чтобы писать код вроде:
if key in my_dict: my_dict[key].append(value) else: my_dict[key] = [value]
вы можете просто написать:
my_dict[key].append(value)
Если ключ не существует, он будет автоматически создан со значением по умолчанию, возвращаемым фабричной функцией.
Заключение
В этом руководстве мы узнали, как использовать класс defaultdict
в Python для создания словарей со значениями по умолчанию для несуществующих ключей. Мы увидели, как использовать встроенные фабричные функции, а также как создавать собственные фабричные функции. Мы также увидели, как создавать вложенные defaultdicts
и преимущества использования defaultdict
в нашем коде. Обладая этими знаниями, вы сможете писать более чистый, лаконичный и эффективный код, использующий словари в Python.