Slovníky – kúzelná kniha Janka a Marienky
Janko a Marienka si najprv zapisovali poklady do zoznamu:
predmety = ["Meč", "Štít", "Luk"]
Samotné názvy im však nestačili. Chceli si ku každému predmetu uložiť aj jeho silu. Vo vnorenom zozname by museli pamätať na význam jednotlivých pozícií:
predmety = [["Meč", 15], ["Štít", 8], ["Luk", 10]]
print(predmety[0][1]) # sila meča
Prehľadnejšie by bolo vyhľadať silu priamo podľa názvu predmetu. Presne na to slúži v Pythone slovník (dictionary).
Čo je slovník?
Slovník ukladá údaje ako dvojice kľúč → hodnota:
Meč → 15
Štít → 8
Luk → 10
Kľúč označuje položku a hodnota obsahuje údaj, ktorý k nej patrí. Namiesto číselného indexu preto používame zmysluplný názov.
Vytvorenie slovníka
Slovník zapisujeme do zložených zátvoriek {}. Kľúč od hodnoty oddeľujeme dvojbodkou a položky čiarkou.
poklady = {
"Meč": 15,
"Štít": 8,
"Luk": 10
}
V položke "Meč": 15 je "Meč" kľúč a 15 hodnota. Každý kľúč musí byť v slovníku jedinečný.
Prístup k hodnote
Hodnotu získame pomocou kľúča v hranatých zátvorkách:
print(poklady["Meč"])
Výstup:
15
Kým v zozname by sme použili napríklad index 0, v slovníku použijeme kľúč "Meč".
Rôzne typy hodnôt
Hodnoty v jednom slovníku môžu mať rôzne dátové typy:
marienka = {
"meno": "Marienka",
"vek": 15,
"mesto": "Košice",
"čarodejník": False
}
print(marienka["mesto"])
Takýto zápis je zrozumiteľnejší než zoznam, pri ktorom by sme si museli pamätať, na ktorom indexe je meno, vek alebo mesto.
Zmena a pridanie položky
Priradením hodnoty k existujúcemu kľúču pôvodnú hodnotu prepíšeme:
poklady["Meč"] = 25
Ak kľúč ešte neexistuje, rovnakým zápisom vytvoríme novú položku:
poklady["Elixír"] = 5
Slovník teraz obsahuje štyri položky:
print(poklady)
{'Meč': 25, 'Štít': 8, 'Luk': 10, 'Elixír': 5}
Pridanie viacerých položiek
Metóda update() pridá do slovníka viac položiek naraz:
poklady.update({
"Prsteň": 50,
"Prilba": 12
})
Ak niektorý kľúč už existuje, update() prepíše jeho hodnotu.
Počet položiek
Funkcia len() vráti počet dvojíc kľúč – hodnota:
print(len(poklady))
Výstup:
6
Prechádzanie slovníkom
Obyčajný cyklus for prechádza kľúče slovníka:
for predmet in poklady:
print(predmet)
Rovnaký výsledok dostaneme s metódou keys():
for predmet in poklady.keys():
print(predmet)
Ak potrebujeme iba hodnoty, použijeme values():
for hodnota in poklady.values():
print(hodnota)
Najčastejšie potrebujeme kľúč aj hodnotu. Metóda items() ich poskytne naraz:
for predmet, hodnota in poklady.items():
print(predmet, hodnota)
Názvy premenných predmet a hodnota si volíme sami.
Kontrola kľúča pomocou in
Operátor in zisťuje, či sa medzi kľúčmi nachádza zadaný kľúč:
print("Prsteň" in poklady) # True
print("Sekera" in poklady) # False
Ak chceme hľadať medzi hodnotami, musíme použiť poklady.values().
Čítanie pomocou get()
Prístup cez hranaté zátvorky vyvolá pri neexistujúcom kľúči chybu KeyError:
print(poklady["Sekera"])
Ak chýbajúci kľúč nie je chybou programu, môžeme použiť metódu get():
print(poklady.get("Sekera")) # None
print(poklady.get("Sekera", 0)) # 0
Druhý argument určuje hodnotu, ktorá sa vráti, ak kľúč neexistuje.
Odstraňovanie položiek
Príkaz del
Ak poznáme existujúci kľúč, položku odstránime príkazom del:
del poklady["Luk"]
Pri neexistujúcom kľúči del vyvolá chybu KeyError.
Metóda pop()
Metóda pop() položku odstráni a zároveň vráti jej hodnotu:
hodnota = poklady.pop("Elixír")
print(hodnota) # 5
Predvolená hodnota zabráni chybe, ak kľúč neexistuje:
hodnota = poklady.pop("Sekera", None)
Metóda popitem()
Metóda popitem() odstráni poslednú pridanú položku a vráti ju ako dvojicu (kľúč, hodnota):
posledna_polozka = poklady.popitem()
print(posledna_polozka)
Ak je slovník prázdny, popitem() vyvolá chybu KeyError.
Metóda clear()
Metóda clear() odstráni všetky položky, ale samotný slovník zostane existovať:
poklady.clear()
print(poklady) # {}