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 с различными примерами.