logo

Defaultdict у Python

Словник — це невпорядкована колекція значень даних у Python, яка використовується для зберігання таких значень даних, як карти. Словник містить пари ключ-значення, а не одне значення як елемент, як інші типи даних. Ключ, реалізований у словнику, має бути унікальним і незмінним. Тобто кортеж Python може бути ключем, але список Python не може бути ключем у словнику. Ми можемо створити словник, помістивши послідовність елементів у фігурні дужки {}, кома «,» може розділити значення.

приклад 1:

 Dict_1 = {1: 'A', 2: 'B', 3: 'C', 4: 'D'} print ('Dictionary: ') print (Dict_1) print ('key pair 1: ', Dict_1[1]) print ('key pair 3: ', Dict_1[3]) 

Вихід:

 Dictionary: {1: 'A', 2: 'B', 3: 'C', 4: 'D'} key pair 1: A key pair 3: C 

Але якщо ми спробуємо надрукувати 5-е значення ключа, ми отримаємо помилку, оскільки 'Dict_1' не містить 5-е значення ключа.

приклад 2:

 Dict_1 = {1: 'A', 2: 'B', 3: 'C', 4: 'D'} print ('Dictionary: ') print (Dict_1) print ('key pair 5: ', Dict_1[5]) 

Вихід:

 Dictionary: {1: 'A', 2: 'B', 3: 'C', 4: 'D'} --------------------------------------------------------------------------- KeyError Traceback (most recent call last) in 2 print ('Dictionary: ') 3 print (Dict_1) ----> 4 print ('key pair 5: ', Dict_1[5]) KeyError: 5 

Щоразу, коли keyError піднято, це може стати проблемою для користувачів. Ми можемо подолати цю помилку, використовуючи інший словник Python, який схожий на контейнер, відомий як Defaultdict . Користувачі можуть знайти цей словник усередині 'колекції' модуль.

defaultdict

defaultdict — це словник Python, який схожий на контейнер, присутній у модулі «колекції». Це підклас класу словника, який використовується для повернення об’єкта, схожого на словник. І defaultdict, і словник мають однакові функції, за винятком того, що defaultdict ніколи не викликає KeyError, оскільки він надає значення за замовчуванням для ключа, якого немає в словнику, створеному користувачем.

Синтаксис:

 defaultdict(default_factory) 

Параметри:

    default_factory:Функція default_factory() повертає значення за умовчанням, встановлене користувачем для визначеного ним словника. Якщо цей аргумент відсутній, словник викличе KeyError.

приклад:

 from collections import defaultdict as DD # Function for returning a default values for the # keys which are not present in the dictionary def default_value(): return 'This key is not present' # Now, we will define the dict dict_1 = DD(default_value) dict_1['ABC'] = 1 dict_1['DEF'] = 2 dict_1['GHI'] = 3 dict_1['JKL'] = 4 print ('Dictionary: ') print (dict_1) print ('key pair 1: ', dict_1['ABC']) print ('key pair 3: ', dict_1['GHI']) print ('key pair 5: ', dict_1['MNO']) 

Вихід:

 Dictionary: defaultdict(, {'ABC': 1, 'DEF': 2, 'GHI': 3, 'JKL': 4}) key pair 1: 1 key pair 3: 3 key pair 5: This key is not present 

Внутрішня робота defaultdict

Коли ми використовуємо defaultdict, ми отримуємо додаткову записувану змінну екземпляра та один метод на додаток до стандартних операцій зі словником. Змінна екземпляра, доступна для запису, є параметром default_factory і __пропав__ це метод.

    default_factory:Функція default_factory() повертає значення за умовчанням, встановлене користувачем для визначеного ним словника.

приклад:

 from collections import defaultdict as DD dict_1 = DD(lambda: 'This key is not present') dict_1['ABC'] = 1 dict_1['DEF'] = 2 dict_1['GHI'] = 3 dict_1['JKL'] = 4 print ('Dictionary: ') print (dict_1) print ('key value 1: ', dict_1['ABC']) print ('key value 3: ', dict_1['GHI']) print ('key value 5: ', dict_1['MNO']) 

Вихід:

 Dictionary: defaultdict(<function at 0x0000019efc4b58b0>, {&apos;ABC&apos;: 1, &apos;DEF&apos;: 2, &apos;GHI&apos;: 3, &apos;JKL&apos;: 4}) key value 1: 1 key value 3: 3 key value 5: This key is not present </function>
    __відсутній__():Функція __missing__() використовується для надання словнику значення за умовчанням. Функція __missing__() приймає default_factory як аргумент, і якщо для аргументу встановлено значення None, виникне KeyError; інакше він надасть значення за замовчуванням для даного ключа. Цей метод по суті називається __getitem__() функція класу dict, коли запитуваний ключ не знайдено. Функція __getitem__() піднімає або повертає значення, яке присутнє у функції __missing__().

приклад:

 from collections import defaultdict as DD dict_1 = DD(lambda: &apos;This key is not present&apos;) dict_1[&apos;ABC&apos;] = 1 dict_1[&apos;DEF&apos;] = 2 dict_1[&apos;GHI&apos;] = 3 dict_1[&apos;JKL&apos;] = 4 print (&apos;Dictionary: &apos;) print (dict_1) print (&apos;key value 1: &apos;, dict_1.__missing__(&apos;ABC&apos;)) print (&apos;key value 4: &apos;, dict_1[&apos;JKL&apos;]) print (&apos;key value 5: &apos;, dict_1.__missing__(&apos;MNO&apos;)) 

Вихід:

 Dictionary: defaultdict(<function at 0x0000019efc4b5670>, {&apos;ABC&apos;: 1, &apos;DEF&apos;: 2, &apos;GHI&apos;: 3, &apos;JKL&apos;: 4}) key value 1: This key is not present key value 4: 4 key value 5: This key is not present </function>

Як використовувати «Список» як default_factory

Ми можемо передати клас списку як аргумент default_factory, і він створить defaultdict зі значеннями, встановленими у форматі списку.

приклад:

виключення Java
 from collections import defaultdict as DD # Defining a dictionary dict_1 = DD(list) for k in range(7, 12): dict_1[k].append(k) print (&apos;Dictionary with values as list:&apos;) print (dict_1) 

Вихід:

 Dictionary with values as list: defaultdict(, {7: [7], 8: [8], 9: [9], 10: [10], 11: [11]}) 

Як використовувати 'int' як default_factory

Ми можемо передати клас int як аргумент default_factory, і він створить defaultdict із нульовим значенням за замовчуванням.

приклад:

 from collections import defaultdict as DD # Defining the dict dict_1 = DD(int) J = [1, 2, 3, 4, 2, 4, 1, 2] # Now, we will iterate through the list &apos;J&apos; # for keeping the count for k in J: # As, The default value is 0 # so we do not need to # enter the key first dict_1[k] += 1 print(dict_1) 

Вихід:

 defaultdict(, {1: 2, 2: 3, 3: 1, 4: 2}) 

Висновок

У цьому посібнику ми обговорювали defaultdict у Python і те, як ми можемо виконувати різні операції над defaultdict за допомогою параметра default_factory.