У овом водичу ћете научити како да користите дефаултдицт из Питхон-овог модула колекција — да боље рукујете КеиЕррорс — када радите са Питхон речницима.
У Питхон-у, речник је моћна уграђена структура података која чува податке у паровима кључ-вредност. Користићете тастере да додирнете речник и приступите вредностима.
Међутим, када имате више речника у вашој Питхон скрипти који се мењају током извршавања кода, често ћете наићи на КеиЕррорс. И постоји неколико различитих начина на које можете да се носите са њима.
У овом водичу ћете научити:
- Шта су КеиЕррорс и зашто настају
- Како поступати са грешкама у кључу
- Како користити Питхон-ов дефаултдицт, подкласу која насљеђује од уграђене класе дицт, за боље руковање кључевима који недостају
Почнимо!
Преглед садржаја
Шта су грешке у кључу у Питхон-у?
Када дефинишете Питхон речник, треба да водите рачуна о томе да обезбедите следеће:
- Кључеви треба да буду јединствени – без икаквог понављања.
- Када користите постојећи итерабле као кључеве речника, требало би да радије користите непроменљиву колекцију као што је тупле.
Дакле, кључ је валидан само ако је присутан у речнику; иначе води до грешака у кључу.
Размотрите следећи речник, боокс_аутхорс, у коме су кључеви имена књига, а вредности имена аутора.
Можете кодирати заједно са овим водичем у Питхон РЕПЛ-у.
books_authors = { 'Deep Work':'Cal Newport', 'Hyperfocus':'Chris Bailey', 'Pivot':'Jenny Blake', 'The Happiness Equation':'Neil Pasricha' }
Можете користити кључ (назив књиге) за приступ имену аутора.
books_authors['Hyperfocus'] 'Chris Bailey'
Да бисте приступили свим паровима кључ/вредност у речнику, можете позвати метод итемс() на објекту речника, као што је приказано у наставку:
for book,author in books_authors.items(): print(f"'{book}' by {author}")
'Deep Work' by Cal Newport 'Hyperfocus' by Chris Bailey 'Pivot' by Jenny Blake 'The Happiness Equation' by Neil Pasricha
Ако покушате да приступите вредности кључа који није присутан у речнику, Питхон интерпретер покреће КеиЕррор. Наилазимо на КеиЕррор када покушамо да приступимо вредностима кључева који не постоје, наиме, ‘Грит’ и ‘нон-екистент кеи’.
books_authors['Grit']
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-6-e1a4486f5ced> in <module> ----> 1 books_authors['Grit'] KeyError: 'Grit'
books_authors['non-existent-key']
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) <ipython-input-7-a3efd56f69e5> in <module> ----> 1 books_authors['non-existent-key'] KeyError: 'non-existent-key'
Дакле, како се носите са КеиЕррорс у Питхон-у?
Постоји неколико начина да се то уради, а ми ћемо их научити у следећем одељку.
Како руковати грешкама у кључу у Питхон-у
Хајде да научимо како да рукујемо КеиЕррорс користећи:
- Иф-елсе условни искази
- Покушајте-осим блокова
- Метод речника .гет()
#1. Коришћење условних изјава Иф-Елсе
Један од најједноставнијих начина за руковање КеиЕррорс у Питхон-у је коришћење условних наредби иф-елсе.
У Питхон-у, иф-елсе изјаве имају следећу општу синтаксу:
if condition: # do this else: # do something else
- Ако је услов Тачан, наредбе у телу иф се извршавају, и
- Ако је услов Фалсе, наредбе у телу елсе се извршавају.
У овом примеру, услов је да се провери да ли је кључ присутан у речнику.
Ако је кључ присутан у речнику, ин оператор ће вратити Труе, а ако тело ће бити извршено исписивање одговарајуће вредности.
key = 'The Happiness Equation' if key in books_authors: print(books_authors[key]) else: print('Sorry, this key does not exist!') # Output # Neil Pasricha
Ако кључ није присутан у речнику, ин оператор враћа Фалсе и тело елсе ће бити извршено. Штампа поруку да кључ није присутан.
key = 'non-existent-key' if key in books_authors: print(books_authors[key]) else: print('Sorry, this key does not exist!') # Output # Sorry, this key does not exist!
#2. Коришћење наредби Три-Екцепт
Још један уобичајени метод за руковање КеиЕррор-ом је коришћење наредби три-екцепт у Питхон-у.
Прочитајте следећи блок кода:
key = 'non-existent-key' try: print(books_authors[key]) except KeyError: print('Sorry, this key does not exist!')
- Блок три покушава да преузме вредност која одговара датом кључу.
- Ако кључ није присутан, интерпретатор покреће КеиЕррор који се обрађује као изузетак унутар блока осим.
#3. Коришћење .гет() методе
У Питхон-у можете користити уграђену методу речника .гет() за руковање кључевима који недостају.
Општа синтакса за коришћење методе гет() је дицт.гет(кеи,дефаулт_валуе) где је дицт важећи објекат речника у Питхон-у.
– Ако је кључ присутан у речнику, метода гет() враћа вредност.
– У супротном, враћа подразумевану вредност.
У овом примеру, кључеви су листа кључева чијим вредностима желимо да приступимо. Пролазимо кроз листу кључева да бисмо преузели одговарајуће вредности из речника боокс_аутхорс.
Овде смо користили метод .гет() са подразумеваном вредношћу „Не постоји“.
keys = ['Grit','Hyperfocus','Make Time','Deep Work'] for key in keys: print(books_authors.get(key,'Does not exist'))
У горњем коду:
- За кључеве који су присутни у речнику боокс_аутхорс, метода .гет() враћа одговарајуће вредности.
- Када кључеви не постоје, у овом случају, ‘Грит’ и ‘Маке Тиме’, метода .гет() враћа подразумевану вредност ‘Не постоји’.
# Output Does not exist Chris Bailey Does not exist Cal Newport
Све горе наведене методе помажу нам у руковању кључним грешкама. Међутим, они су опширни и захтевају од нас да експлицитно рукујемо кључевима који недостају. Овај процес можете поједноставити коришћењем дефаултдицт уместо обичног речника.
Дефаултдицт у Питхон-у
Стандарддицт је подкласа класе речника (дицт). Дакле, наслеђује понашање Питхон речника. Поред тога, он такође природно управља недостајућим кључевима.
Подразумевани дикт је тип података контејнера који је уграђен у стандардну библиотеку Питхон – унутар модула колекција.
Дакле, морате га увести у своје радно окружење:
from collections import defaultdict
Ево опште синтаксе за коришћење дефаултдицта:
defaultdict(default_factory)
Као атрибут дефаулт_фацтори можете навести атрибут који се може позвати као што је инт, флоат или лист. Ако не наведете вредност за дефаулт_фацтори, подразумевано ће бити Нема.
Када кључ који тражите није присутан, покреће се метод __миссинг__() и он закључује подразумевану вредност из дефаулт_фацтори. Затим враћа ову подразумевану вредност.
Укратко:
- У Питхон-у, дефаултдицт враћа подразумевану вредност када кључ није присутан.
- Такође додаје овај пар кључ-подразумевана вредност у речник, који затим можете да измените.
Питхон Дефаултдицт Примери
Затим ћемо кодирати неколико примера да бисмо разумели како Питхон дефаултдицт функционише.
Дефаултдицт у Питхон-у са подразумеваном целобројном вредношћу
Прво увезите дефаултдицт из модула колекција.
from collections import defaultdict import random
Хајде да креирамо подразумеване цене.
prices = defaultdict(int)
Сада попуњавамо речник цена користећи ставке са листе воћа као кључеве. И ми насумично узоркујемо вредности из листе цена да бисмо добили вредности.
price_list = [10,23,12,19,5] fruits = ['apple','strawberry','pomegranate','blueberry'] for fruit in fruits: prices[fruit] = random.choice(price_list)
Хајде да погледамо парове кључ/вредност у подразумеваним ценама.
print(prices.items())
dict_items([('apple', 12), ('blueberry', 19), ('pomegranate', 5), ('strawberry', 10)])
Попут обичног Питхон речника, можете да приступите вредностима подразумеваних цена користећи кључеве:
prices['apple'] # 23
Покушајмо сада да приступимо цени воћа које нема, рецимо, ‘наранџе’. Видимо да враћа подразумевану вредност нула.
prices['orange'] # 0
Ако одштампамо речник, видимо да је додат нови кључ ‘наранџасти’ са подразумеваном целобројном вредношћу нула.
print(prices.items())
dict_items([('apple', 12), ('blueberry', 19), ('pomegranate', 5), ('strawberry', 10), ('orange', 0)])
Дефаултдицт у Питхон-у са листом као подразумеваном вредношћу
Хајде да дефинишемо студенте_мајорс као подразумевани дикт за листе. Имена мајора су кључеви. А вредности су листе студената који похађају сваки од смерова, као што су математика, економија, информатика и још много тога.
from collections import defaultdict students_majors = defaultdict(list)
Ако покушамо да приступимо листи ученика која одговара ‘Економији’, дефаултдицт враћа празну листу; нема кључних грешака!
students_majors['Economics'] # []
Сада имамо празну листу мапирану на смер ‘Економија’. Дакле, сада можемо додати елементе овој листи користећи метод листе .аппенд().
students_majors['Economics'].append('Alex')
Направљен је унос за ‘Економију’ у подразумеваном речнику студент_мајорс.
print(students_majors)
defaultdict(<class 'list'>, {'Economics': ['Alex']})
Можете додати још студената на листу мапирања на Економски смер, додати нови смер и још много тога!
students_majors['Economics'].append('Bob') students_majors['Math'].append('Laura') print(students_majors)
defaultdict(<class 'list'>, {'Economics': ['Alex', 'Bob'], 'Math': ['Laura']})
Закључак
Надам се да вам је овај водич помогао да разумете како и када треба да користите дефаултдицт у Питхон-у. Након што покренете примере кода у овом водичу, можете покушати да користите дефаултдицт као жељену структуру података у вашим пројектима када је то потребно.
Ево резимеа онога што сте научили у овом водичу.
- Када радите са Питхон речником, често ћете наићи на КеиЕррорс.
- За руковање таквим КеиЕррорс можете користити неколико опширних метода. Можете користити условне изјаве, блокове три-екцепт или метод .гет(). Али тип података дефаултдицт у модулу колекције може да поједностави руковање овим КеиЕррор-ом.
- Можете користити дефаултдицт(дефаулт_фацтори) где је дефаулт_фацтори валидан позив.
- Када кључ није присутан у дефаултдицту, подразумевана вредност (изведена из дефаулт_фацтори) и кључ се додају у дефаултдицт.
Затим погледајте водич о функцији мапе Питхон-а.