Python. Класс словаря defaultdict

Python предлагает множество встроенных структур данных, таких как списки, кортежи и словари, для эффективного сохранения данных и управления ими. Словари позволяют легко сохранять данные в виде пар «ключ-значение». Ключ действует как индекс и используется для извлечения данных. Ключи должны быть уникальными и неизменными во всем словаре. Ключи в основном представляют собой строки и целые числа, хотя значение ключа может быть любого типа, например целое число, строка, число с плавающей запятой или комплексное число. Между тем, словарь может содержать коллекцию, такую ​​как список, кортеж или какой-либо другой тип словаря. Словарь в Python создается с помощью пары фигурных скобок, в которых каждая пара «ключ-значение» разделяется запятой.

Что, если вы попытаетесь получить доступ или изменить определенный ключ в несуществующем словаре? Что ж, в этом случае интерпретатор Python вызовет ошибку «KeyError» и прекратит выполнение программы.

Давайте посмотрим на пример ошибки KeyError.

#Создание списка

my_dict= {1:"Hello",2:"Welcome",3:"AndreyEx"}

#доступ к несуществующему ключу

my_dict[4]

 

Для обработки этой ошибки Python предоставляет тип defaultdict, класс словаря, который можно найти в модуле коллекций. В этой статье подробно рассматривается Python defaultdict.

 

Объяснение и примеры defaultdict

Defaultdict — это альтернатива словарю Python. Он возвращает объекты типа словаря. Defaultdict — это подкласс dict. В случае отсутствия ключа вместо того, чтобы вызывать ошибку «KeyError», значение по умолчанию предоставляется для несуществующего ключа. Синтаксис defaultdict следующий:

defaultdict(default_factory)

Функция defaultdict принимает в качестве аргумента параметр default_factory. Функция default_factory возвращает значение по умолчанию для определенного defaultdict. Если мы попытаемся получить доступ или изменить отсутствующий ключ, то функция default_factory в качестве результата вернет значение по умолчанию. Если функция default_factory отсутствует, defaultdic вызовет ошибку «KeyError», если будут отсутствовать какие-либо ключи.

Во-первых, мы реализуем defaultdic в нашем скрипте Python для доступа как к существующим, так и к отсутствующим ключам.

# импортировать defaultdict из модуля коллекции

from collections import defaultdict

# определение функции, возвращающей значение по умолчанию

def my_func():

print("Ключ не определен")

# создание defualtdict 

# передача my_func() в качестве аргумента для defaultdict

my_dict=defaultdict(my_func)

# определение ключей и значений

my_dict[1]="Привет"

my_dict[2]="Добро пожаловать"

my_dict[3]="AndreyEx" 

#доступ к значениям с помощью ключей

print(my_dict [1])

print(my_dict [2])

print(my_dict [3]) 

# доступ к отсутствующему или не определенному ключу

my_dict [4]

 

[4] — это недостающий ключ. Таким образом, вместо того, чтобы вызвать ошибку «KeyError», он вызывает функцию default_factory, которая возвращает значение по умолчанию.

Лямбда-функция, известная как анонимная функция, также может использоваться в качестве параметра default_factory.

Затем мы реализуем лямбда-функцию и передадим ее в качестве аргумента defaultdict.

# импортировать defaultdict из модуля коллекции

from collections import defaultdict

# создать defualtdict

# передать функцию Lamnda в качестве аргумента defaultdict

my_dict=defaultdict(lambda:"Ключ не определен")

# определение ключей и значений

my_dict[1]="Привет"

my_dict[2]="Добро пожаловать"

my_dict[3]="AndreyEx" 

#доступ к значениям с помощью ключей

print(my_dict[1])

print(my_dict [2])

print(my_dict [3]) 

#доступ к отсутствующему или не определенному ключу

print(my_dict [4])

 

Defaultdict вызывает default_factory для предоставления значения по умолчанию, но функция __missing () __ предоставляет значение по умолчанию. Функция __missing () __ — это встроенная функция в Python, которая принимает в качестве аргумента параметр default_factory. Если параметр default_factory не определен, функция __missing () __ вызывает ошибку «KeyError».

Здесь мы будем использовать функцию __missing () __ в нашем скрипте Python.

# импортировать defaultdict из модуля коллекции

from collections import defaultdict

# определение функции для возврата значения по умолчанию

def my_func() :

print("Ключ не определен")

# создание defualtdict 

#передача my_func() в качестве аргумента для defaultdict

my_dict=defaultdict(my_func)

# определение ключей и значений

my_dict[1]="AndreyEx" 

# доступ к значениям с помощью ключей

print(my_dict [1]) 

# доступ к отсутствующему или не определенному ключу

my_dict.__missing__(2)

 

Классы list и int также могут использоваться как параметры default_factory с defaultdict.

 

Список как параметр default_factory

Defaultdict создается со значениями списка, когда классу списка передается параметр default_factory.

# импортировать defaultdict из модуля коллекции

from collections import defaultdict

# определение класса списка передачи defaultdict

# как default_factory

my_dict=defaultdict(list)

for i in range(7):

my_dict[i].append(i)

#печать значений

print(my_dict)

 

На выходе отображаются значения в списке. Как видите, был создан defaultdict, содержащий ключ и значения.

 

Целые числа как параметр default_factory

Если мы передадим класс int в качестве параметра default_factory, мы сможем создать defaultdict, который будет содержать только целые числа. Мы создадим список целых чисел и сохраним его в defaultdict.

# импортировать defaultdict из модуля коллекции

from collections import defaultdict

# определение defaultdict

# передача класса int как default_factory

my_dict=defaultdict(int)

# создание списка целых чисел

my_list=[1,2,3]

for i in my_list:

my_dict[i]+=1

#печать значений

print(my_dict)

 

В данном выводе целые значения перед двоеточием (:) являются ключами, а целые значения после двоеточия — значениями.

 

Вывод

Dafualtdict — это подобный словарю класс, присутствующий в модуле коллекций. Он работает как словарь Python, но не вызывает ошибку «KeyError», если ключ не найден. Эта статья подробно объясняет defaultdict с различными примерами.



2020-11-25T12:42:58
Python