Како и када треба да користите Дефаултдицт у Питхон-у?

У овом водичу ћете научити како да користите дефаултдицт из Питхон-овог модула колекција — да боље рукујете КеиЕррорс — када радите са Питхон речницима.

У Питхон-у, речник је моћна уграђена структура података која чува податке у паровима кључ-вредност. Користићете тастере да додирнете речник и приступите вредностима.

Међутим, када имате више речника у вашој Питхон скрипти који се мењају током извршавања кода, често ћете наићи на КеиЕррорс. И постоји неколико различитих начина на које можете да се носите са њима.

У овом водичу ћете научити:

  • Шта су КеиЕррорс и зашто настају
  • Како поступати са грешкама у кључу
  • Како користити Питхон-ов дефаултдицт, подкласу која насљеђује од уграђене класе дицт, за боље руковање кључевима који недостају

Почнимо!

Шта су грешке у кључу у Питхон-у?

Када дефинишете Питхон речник, треба да водите рачуна о томе да обезбедите следеће:

  • Кључеви треба да буду јединствени – без икаквог понављања.
  • Када користите постојећи итерабле као кључеве речника, требало би да радије користите непроменљиву колекцију као што је тупле.

Дакле, кључ је валидан само ако је присутан у речнику; иначе води до грешака у кључу.

Размотрите следећи речник, боокс_аутхорс, у коме су кључеви имена књига, а вредности имена аутора.

Можете кодирати заједно са овим водичем у Питхон РЕПЛ-у.

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

Закључак

Надам се да вам је овај водич помогао да разумете како и када треба да користите дефаултдицт у Питхон-у. Након што покренете примере кода у овом водичу, можете покушати да користите дефаултдицт као жељену структуру података у вашим пројектима када је то потребно.

  Испробајте ове алате за писање е-поште са АИ хладном е-поштом да бисте писали е-поруке са високом конверзијом

Ево резимеа онога што сте научили у овом водичу.

  • Када радите са Питхон речником, често ћете наићи на КеиЕррорс.
  • За руковање таквим КеиЕррорс можете користити неколико опширних метода. Можете користити условне изјаве, блокове три-екцепт или метод .гет(). Али тип података дефаултдицт у модулу колекције може да поједностави руковање овим КеиЕррор-ом.
  • Можете користити дефаултдицт(дефаулт_фацтори) где је дефаулт_фацтори валидан позив.
  • Када кључ није присутан у дефаултдицту, подразумевана вредност (изведена из дефаулт_фацтори) и кључ се додају у дефаултдицт.

Затим погледајте водич о функцији мапе Питхон-а.