3. diel - Slovníky v Pythone
V predchádzajúcej lekcii, Tuples a množiny v Pythone, sme sa zamerali na tuples a množiny.
V tomto tutoriále kolekcií v Pythone sa zameriame na slovníky. Vysvetlíme si, na čo sa používajú a v čom sa od seba líšia. Popíšeme si aj základné metódy, ktoré na prácu s týmito kolekciami budeme používať.
Slovníky
Slovník (Dictionary) funguje podobne ako zoznam, až na to, že k nemu nepristupujeme len pomocou indexov, ale aj na základe kľúčových hodnôt rôznych, avšak nemenných dátových typov. Index slovníkov nazývame kľúč. Na poradí jednotlivých položiek v slovníku nezáleží.
Dáta v sekvencii sú uložené špeciálnym spôsobom, tzv. hashovaním. To nám umožňuje pristupovať k prvkom pomocou kľúča oveľa rýchlejšie, než keby sme ich podľa tejto vlastnosti hľadali napr. v obyčajnom zozname. Zatiaľ čo pri zozname je potrebné všetky prvky prejsť a kontrolovať, či náhodou ich vlastnosť nezodpovedá tomu, čo hľadáme, slovník dokáže na prvok siahnuť oveľa rýchlejšie vďaka výpočtu tzv. hashu (odtlačku). Môžeme si to predstaviť tak, že máme prvky v obyčajnom zozname. Nie sú však bezprostredne za sebou, nejaké indexy nie sú využité vôbec. Finta spočíva v tom, že sme schopní z kľúča zistiť index prvku pomocou hashovacej funkcie. Ak budeme mať v slovníku uložených zamestnancov a kľúčom bude ich meno, hashovacia funkcia nám z "John Smith" vráti napr. 114. Siahneme na 114. prvok a hľa, je tam John Smith. Nemusíme slovník nijako iterovať.
Slovník deklarujeme rovnako ako zoznam. Hlavný rozdiel je v tom, že
používame zložené zátvorky a musíme k položkám definovať aj ich
kľúče. Na to používame operátor dvojbodka :. Slovníky sú
teda použité na uloženie hodnôt v pároch kľúč: hodnota
(key: value):
favorite_things = {
'homer': 'donuts',
'marge': 'oven',
'bart': 'slingshot',
'lisa': 'saxophone'
}
Zápis položiek sme rozdelili kvôli prehľadnosti do viacerých riadkov,
ale išlo by to aj v jednom. V slovníku máme päť hodnôt:
'donuts', 'oven', 'slingshot',
'saxophone'. Každá hodnota patrí nejakému kľúču
('homer', 'marge', 'bart'a
'lisa'). Hodnoty priradíme ku kľúču pomocou dvojbodky
(:) a oddeľujeme čiarkou, ktorá sa väčšinou píše aj za
poslednou položkou.
Pre prácu so slovníkom platí to isté, čo sme si ukazovali pri zozname:
favorite_things = {
'homer': 'donuts',
'marge': 'oven',
'bart': 'slingshot',
'lisa': 'saxophone'
}
print(f"Homer likes {favorite_things['homer']}")
Namiesto zápisu favorite_things[0] sme použili kľúč typu
string. Veľkou výhodou použitia slovníka je lepšia
čitateľnosť, kedy priamo vidíme, akú hodnotu zo slovníka
dostávame. Zatiaľ čo pri číselných indexoch možno ani nevieme, o akú
hodnotu ide. Každý kľúč musí byť unikátny, ale hodnoty
unikátné byť nemusia. Páry kľúč:hodnota môžu byť akékoľvek
nemenné dátové typy. Ak definujeme rovnaký kľúč v rovnakom
slovníku viackrát a s rôznymi hodnotami, bude kľúču priradená posledná
hodnota.
Pridávanie položiek
Do slovníka môžeme jednoducho pridávať ďalšie položky priradením nových kľúčov:
favorite_things = {
'homer': 'donuts',
'marge': 'oven',
'bart': 'slingshot',
'lisa': 'saxophone'
}
favorite_things['maggie'] = 'pacifier'
print(f"Homer likes {favorite_things ['homer']}")
print(f"Maggie likes {favorite_things['maggie']}")
Rovnakým spôsobom môžeme modifikovať už uložené hodnoty.
Zistenie počtu položiek
Na zistenie počtu položiek v slovníku použijeme globálnu funkciu
len() známu už zo zoznamov:
favorite_things = {
'homer': 'donuts',
'marge': 'oven',
'bart': 'slingshot',
'lisa': 'saxophone',
'maggie': 'pacifier'
}
print(f'Number of items: {len(favorite_things)}')
Zistenie či slovník obsahuje požadovaný kľúč
Pomocou operátora in sa spýtame, či slovník obsahuje
určitý kľúč. V Pythone 2.x k tomu bola určená metóda
has_key(), ktorá je ale teraz zastaraná:
favorite_things = {
'homer': 'donuts',
'marge': 'oven',
'bart': 'slingshot',
'lisa': 'saxophone',
'maggie': 'pacifier'
}
simpson = input("Hi, enter your favorite Simpson (from the Simpson family): ").lower()
if simpson in favorite_things:
print(f"{simpson} likes {favorite_things[simpson]}.")
else:
print("Hey, that's not a Simpson!")
Výsledok v konzole:
Konzolová aplikácia
Hi, enter your favorite Simpson (from the Simpson family):
homer
homer likes donuts.
Metódy slovníkov
Podobne ako pri zoznamoch existuje aj pre slovníky niekoľko dostupných metód. Pozrime sa na tie najdôležitejšie.
Metóda get()
Metóda get() ponúka ďalší spôsob na získanie položky zo
slovníka. Hlavnou výhodou tejto metódy je, že nevyhodí žiadnu výnimku v prípade, že hľadaný
kľúč v slovníku nie je. Namiesto toho vráti hodnotu None alebo
niektorú východiskovú hodnotu, špecifikovateľnú v druhom parametri:
favorite_things = {
'homer': 'donuts',
'marge': 'oven',
'bart': 'slingshot',
'lisa': 'saxophone',
'maggie': 'pacifier'
}
print(favorite_things.get('homer'))
print(favorite_things.get('krusty'))
print(favorite_things.get('krusty', 'nobody'))
Výsledok:
Konzolová aplikácia
donuts
None
nobody
Metódy values(),
keys(), a items()
Pomocou týchto metód môžeme previesť slovník na zoznam. Môžeme tak vyčleniť hodnoty, kľúče alebo dokonca vytvoriť zoznamy n-tic párov kľúč-hodnota:
favorite_things = {
'homer': 'donuts',
'marge': 'oven',
'bart': 'slingshot',
'lisa': 'saxophone',
'maggie': 'pacifier'
}
print(favorite_things.values())
print(favorite_things.keys())
print(favorite_things.items())
Výsledok:
Konzolová aplikácia
dict_values(['donuts', 'oven', 'slingshot', 'saxophone', 'pacifier'])
dict_keys(['homer', 'marge', 'bart', 'lisa', 'maggie'])
dict_items([('homer', 'donuts'), ('marge', 'oven'), ('bart', 'slingshot'), ('lisa', 'saxophone'), ('maggie', 'pacifier')])
Metóda clear()
Ako samotný názov naznačuje, táto metóda "vyčistí" všetky položky zo slovníka.
V nasledujúcej lekcii, Viacrozmerné zoznamy v Pythone, sa pozrieme na dvojrozmerné (2D) a viacrozmerné zoznamy, vrátane príkladov a zoznamov "zubatých".
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 11x (5.71 kB)
Aplikácia je vrátane zdrojových kódov v jazyku Python
