testovac.sk

Dictionary

Dictionary (slovník), v Pythone typ dict je dátová štruktúra, v ktorej ku prvkom nepristupujeme pomocou číselného indexu (tak, ako sme zvyknutí v prípade zoznamov, n-tíc alebo textových reťazcov) ale pomocou kľúčov. Slovník v sebe uchováva kľúče, ktorým sú priradené hodnoty. Každý kľúč je jedinečný (neexistujú dva rovnaké kľúče). V Pythone zapisujeme slovník pomocou kučeravých zátvoriek, v ktorých uvádzame dvojice kľúč:hodnota oddelené čiarkami. Kľúčom môže byť len immutable (číslo, string, tuple), hodnotou môže byť čokoľvek (aj ďalší slovník). Napríklad:

jazyk = {"java":5, "Python":12, "Haskell":1}

Tento slovník by mohol napríklad reprezentovať, koľko žiakov v triede ovláda daný programovací jazyk. K jednotlivým hodnotám (počet žiakov) môžeme pristupovať cez kľúč (názov jazyka). Napríklad:

print(jazyk["java"]) # vypíše 5

Pridávanie kľúčov, zmena hodnoty

Priradením k neexistujúcemu kľúču sa tento kľúč vytvorí. Ak priradíme hodnotu k existujúcemu kľúču, stará hodnota sa prepíše.

jazyk["Haskell"] = 2    # prepíše hodnotu pod kľúčom Haskell
jazyk["C++"] = 10       # vytvorí kľúč C++ a priradí k nemu hodnotu 10

operácia in a metóda get

Na operáciu in ste zvyknutí pri práci so zoznamami, môžeme pomocou nej zistiť, či je nejaká konkrétna hodnota v zozname. Pri použití so slovníkom táto funkcia zistí, či sa v ňom nachádza daný kľúč. Dá sa tak vyhnúť chybe, keď sa snažíme pristúpiť k hodnote pod neexistujúcim kľúčom, napríklad:

if 'JavaScript' in jazyk: # check či kľúč JavaScript existuje
    print("JS tu ovláda", jazyk['JavaScript'], 'študentov')
else:
    print('O JS nemáme dáta.')

Ak nemáme istotu, či kľúč existuje, môže sa pri prístupe k hodnote pod týmto kľúčom hodiť metóda get(). Tá narozdiel od prístupu k hodnote pomocou kľúča v hranatých zátvorkách v prípade neexistencie kľúča nespôsobí chybu ale vráti hodnotu None. Ak sa nám nehodí None, môžeme túto "náhradnú" hodnotu špecifikovať ako druhý parameter metódy get, napríklad:

print(jazyk["Go"])          # hodí chybu, pretože kľúč Go neexistuje
print(jazyk.get("Go"))      # vypíše "None"
print(jazyk.get("Go", -1)   # vypíše náhradnú hodnotu -1, pretože kľúč neexistuje

iterácia cez kľúče a hodnoty

"Obyčajný" for-cyklus bude iterovať cez kľúče slovníka:

for j in jazyk:
    print(j)        # vypíše po seba java Python C++ Haskell

Pomocou kľúča ľahko pristúpime k hodnote. Ak chceme iterovať cez kľúče a im priradené hodnoty, môžeme to urobiť takto:

for j in jazyk:
    print(j, jazyk[j])        # vypíše po seba jazyky a im priradené číslo študentov

K postupnosti všetkých kľúčov a hodnôt v slovníku poskytujú prístup metódy keys() values() a items(), ak ich použijeme v kombinácii so vstavanými funkciami max, min alebo sorted, môžeme rýchlo nájsť najväčšiu hodnotu v slovníku alebo zabezpečiť, že sa bude cez kľúče prechádzať v usporiadanom poradí. (Kľúče v slovníku usporiadané nie sú.)

max(jazyk.values()) # najväčšia hodnota v slovníku je 12 (pod kľúčom Python)

Metóda items() vráti štruktúru obsahujúcu dvojice kľúč-hodnota, ak použijeme dvojicu iteračných premenných, môžeme takto vo FOR cykle prejsť všetky kľúče a im pridelené hodnoty:

for kluc, hodnota in jazyk.items():
    print(f"jazyk {kluc} ovlada {hodnota} studentov")

Prechádzanie kľúčov v utriedenom poradí:

for kluc in sorted(jazyk):  # mohlo by tu byť aj sorted(jazyk.keys())
    print(kluc)

odstránenie hodnôt