Hľadáš darček, ktorý neskončí v koši? Teraz 90 % extra kreditov ZADARMO s promo kódom DARCEK90. Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

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:

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['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:

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á:

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:

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:

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

 

Predchádzajúci článok
Tuples a množiny v Pythone
Všetky články v sekcii
Kolekcie v Pythone
Preskočiť článok
(neodporúčame)
Viacrozmerné zoznamy v Pythone
Článok pre vás napísal Daniel Zábojník
Avatar
Užívateľské hodnotenie:
45 hlasov
Aktivity