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']) 

Изход:

превключване на java програмиране
 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 със стойностите, които са зададени във формат на списък.

Пример:

 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.