Ebből az oktatóanyagból megtudhatja, hogyan használhatja a Python gyűjteménymoduljából származó defaultdict-et a KeyError-ok jobb kezelése érdekében, amikor Python szótárakat használ.
A Pythonban a szótár egy hatékony beépített adatstruktúra, amely kulcs-érték párokban tárolja az adatokat. A billentyűk segítségével elérheti a szótárt, és elérheti az értékeket.
Ha azonban több olyan szótár van a Python-szkriptben, amelyek a kódvégrehajtás során módosulnak, gyakran futnak KeyErrors-ok. És van néhány különböző módon kezelheti őket.
Ebből az oktatóanyagból megtudhatja:
- Mik azok a kulcshibák, és miért keletkeznek
- A kulcshibák kezelése
- Hogyan használhatjuk a Python alapértelmezett diktátumát, egy alosztályt, amely a beépített dict osztályból öröklődik a hiányzó kulcsok jobb kezelésére
Kezdjük!
Tartalomjegyzék
Mik azok a kulcshibák a Pythonban?
Python szótár meghatározásakor ügyeljen a következőkre:
- A kulcsoknak egyedinek kell lenniük – minden ismétlés nélkül.
- Ha egy meglévő iterálható szótár kulcsaként használ, akkor előnyben kell részesítenie egy megváltoztathatatlan gyűjtemény, például egy sor használatát.
Tehát egy kulcs csak akkor érvényes, ha benne van a szótárban; egyébként KeyErrors-hoz vezet.
Tekintsük a következő, books_authors szótárat, amelyben a kulcsok a könyvek nevei, az értékek pedig a szerzők nevei.
Ezzel az oktatóanyaggal együtt kódolhat egy Python REPL-ben.
books_authors = { 'Deep Work':'Cal Newport', 'Hyperfocus':'Chris Bailey', 'Pivot':'Jenny Blake', 'The Happiness Equation':'Neil Pasricha' }
A kulccsal (a könyv neve) érheti el a szerző nevét.
books_authors['Hyperfocus'] 'Chris Bailey'
A szótár összes kulcs-érték párjának eléréséhez hívja meg az items() metódust a szótárobjektumban, az alábbiak szerint:
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
Ha olyan kulcs értékéhez próbál hozzáférni, amely nem szerepel a szótárban, a Python értelmező KeyError-t vet fel. A KeyError hibaüzenetbe ütközünk, amikor nem létező kulcsok értékéhez próbálunk hozzáférni, nevezetesen a „Grit” és a „non-existent key” kulcsokhoz.
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'
Tehát hogyan kezeli a KeyError-okat a Pythonban?
Ennek néhány módja van, ezeket a következő részben tanuljuk meg.
Hogyan kezeljük a kulcshibákat a Pythonban
Tanuljuk meg, hogyan kell kezelni a kulcshibákat a következő használatával:
- If-else feltételes állítások
- Próbáld ki a blokkokat
- A szótár metódusa .get()
#1. If-Else feltételes kijelentések használata
A Python kulcshibáinak kezelésének egyik legegyszerűbb módja az if-else feltételes utasítások használata.
A Pythonban az if-else utasítások általános szintaxisa a következő:
if condition: # do this else: # do something else
- Ha a feltétel igaz, akkor az if törzsben lévő utasítások végrehajtásra kerülnek, és
- Ha a feltétel False, akkor az else törzsben lévő utasítások végrehajtásra kerülnek.
Ebben a példában a feltétel annak ellenőrzése, hogy a kulcs szerepel-e a szótárban.
Ha a kulcs benne van a szótárban, az in operátor True-t ad vissza, és ha a body végrehajtásra kerül, akkor a megfelelő értéket nyomtatja ki.
key = 'The Happiness Equation' if key in books_authors: print(books_authors[key]) else: print('Sorry, this key does not exist!') # Output # Neil Pasricha
Ha a kulcs nem szerepel a szótárban, az in operátor False értéket ad vissza, és az else törzs végrehajtásra kerül. Kiír egy üzenetet, hogy a kulcs nincs meg.
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. Try-Except utasítások használata
Egy másik gyakori módszer a KeyError kezelésére a Pythonban a try-except utasítások használata.
Olvassa el a következő kódblokkot:
key = 'non-existent-key' try: print(books_authors[key]) except KeyError: print('Sorry, this key does not exist!')
- A try blokk megpróbálja lekérni a megadott kulcsnak megfelelő értéket.
- Ha a kulcs nincs jelen, az értelmező KeyError-t vet fel, amelyet kivételként kezel a kivétel blokkon belül.
#3. A .get() metódus használata
A Pythonban a beépített .get() szótármódszert használhatja a hiányzó kulcsok kezelésére.
A get() metódus általános szintaxisa a dict.get(key,default_value), ahol a dict egy érvényes szótárobjektum a Pythonban.
– Ha a kulcs szerepel a szótárban, akkor a get() metódus visszaadja az értéket.
– Ellenkező esetben az alapértelmezett értéket adja vissza.
Ebben a példában a kulcsok azon kulcsok listája, amelyek értékeit szeretnénk elérni. Végigpörgetjük a kulcslistát, hogy lekérjük a megfelelő értékeket a books_authors szótárból.
Itt a .get() metódust használtuk, a „Nem létezik” alapértelmezett értékkel.
keys = ['Grit','Hyperfocus','Make Time','Deep Work'] for key in keys: print(books_authors.get(key,'Does not exist'))
A fenti kódban:
- A books_authors szótárban található kulcsok esetében a .get() metódus a megfelelő értékeket adja vissza.
- Ha a kulcsok nem léteznek, ebben az esetben a „Grit” és a „Make Time”, a .get() metódus a „Nem létezik” alapértelmezett értéket adja vissza.
# Output Does not exist Chris Bailey Does not exist Cal Newport
A fenti módszerek mindegyike segít a kulcshibák kezelésében. Ezek azonban bőbeszédűek, és megkövetelik, hogy kifejezetten kezeljük a hiányzó kulcsokat. Ezt a folyamatot leegyszerűsítheti egy alapértelmezett szótár használatával.
Alapértelmezett parancs a Pythonban
A defaultdict a szótár (dict) osztály egyik alosztálya. Tehát örökli a Python szótár viselkedését. Ezen kívül a hiányzó kulcsokat is natívan kezeli.
Az alapértelmezett diktátum egy tároló adattípus, amely a Python szabványos könyvtárába van beépítve – a gyűjtemények modulon belül.
Tehát importálnia kell a munkakörnyezetébe:
from collections import defaultdict
Íme a defaultdict használatának általános szintaxisa:
defaultdict(default_factory)
A default_factory attribútumként megadhat egy hívhatót, például int, float vagy listát. Ha nem ad meg értéket a default_factory paraméterhez, akkor alapértelmezés szerint None lesz.
Ha a keresett kulcs nincs jelen, a __missing__() metódus aktiválódik, és az alapértelmezett értéket a default_factoryból következteti ki. Ezután ezt az alapértelmezett értéket adja vissza.
Összefoglalva:
- A Pythonban a defaultdict az alapértelmezett értéket adja vissza, ha a kulcs nincs jelen.
- Ezt a kulcs-alapértelmezett értékpárt is hozzáadja a szótárhoz, amelyet ezután módosíthat.
Python Defaultdict példák
Ezután néhány példát kódolunk, hogy megértsük, hogyan működik a Python defaultdict.
Defaultdict Pythonban alapértelmezett egész értékkel
Először importálja a defaultdict-ot a gyűjtemények modulból.
from collections import defaultdict import random
Hozzon létre egy alapértelmezett árakat.
prices = defaultdict(int)
Most feltöltjük az árszótárat a gyümölcslista elemeivel kulcsként. És véletlenszerűen mintázunk értékeket az árlistából, hogy megkapjuk az értékeket.
price_list = [10,23,12,19,5] fruits = ['apple','strawberry','pomegranate','blueberry'] for fruit in fruits: prices[fruit] = random.choice(price_list)
Vessünk egy pillantást a kulcs-érték párokra az alapértelmezett árakban.
print(prices.items())
dict_items([('apple', 12), ('blueberry', 19), ('pomegranate', 5), ('strawberry', 10)])
A szokásos Python-szótárhoz hasonlóan a billentyűk használatával érheti el az árak alapértelmezett értékeit:
prices['apple'] # 23
Most próbáljuk meg elérni egy olyan gyümölcs árát, amely nincs jelen, mondjuk „narancs”. Látjuk, hogy az alapértelmezett nulla értéket adja vissza.
prices['orange'] # 0
Ha kinyomtatjuk a szótárt, azt látjuk, hogy egy új narancssárga kulcs került hozzáadásra az alapértelmezett nulla egész számmal.
print(prices.items())
dict_items([('apple', 12), ('blueberry', 19), ('pomegranate', 5), ('strawberry', 10), ('orange', 0)])
Defaultdict a Pythonban listával az alapértelmezett érték
Határozzuk meg a students_majors-t a listák alapértelmezett parancsaként. A szakok nevei a kulcsok. Az értékek pedig az egyes szakokon – például matematika, közgazdaságtan, informatika stb. – folytató hallgatók listái.
from collections import defaultdict students_majors = defaultdict(list)
Ha megpróbáljuk elérni a „Közgazdaságtan”-nak megfelelő hallgatói listát, a defaultdict üres listát ad vissza; nincs kulcshiba!
students_majors['Economics'] # []
Most van egy üres listánk a „Közgazdaságtan” szakhoz. Így a listához az .append() metódussal tudunk elemeket hozzáadni.
students_majors['Economics'].append('Alex')
Létrejött a „Közgazdaságtan” szócikk a students_majors alapértelmezett szótárában.
print(students_majors)
defaultdict(<class 'list'>, {'Economics': ['Alex']})
További hallgatókat is felvehet a közgazdasági szakra vonatkozó listához, új szakot adhat hozzá, és még sok más!
students_majors['Economics'].append('Bob') students_majors['Math'].append('Laura') print(students_majors)
defaultdict(<class 'list'>, {'Economics': ['Alex', 'Bob'], 'Math': ['Laura']})
Következtetés
Remélem, ez az oktatóanyag segített megérteni, hogyan és mikor kell használni a defaultdict-ot a Pythonban. Az ebben az oktatóanyagban található kódpéldák futtatása után szükség esetén megpróbálhatja a defaultdict használatát preferált adatstruktúraként a projektekben.
Itt található az oktatóanyagban tanultak összefoglalása.
- Amikor Python szótárral dolgozik, gyakran ütközik KeyErrors-ba.
- Az ilyen kulcshibák kezeléséhez használhat néhány részletes módszert. Használhat feltételes utasításokat, try-except blokkokat vagy a .get() metódust. De az alapértelmezett adattípus a gyűjtemények modulban leegyszerűsítheti ezt a KeyError kezelést.
- Használhatja a defaultdict(default_factory) értéket, ahol a default_factory egy érvényes hívható.
- Ha a kulcs nem szerepel a defaultdictben, az alapértelmezett érték (a default_factory-ból következtetve) és a kulcs hozzáadódik a defaultdicthez.
Ezután nézze meg a Python térképfunkcióról szóló oktatóanyagot.