Janko a Marienka už majú plné batohy, no pri každom predmete si chcú zapamätať aj jeho hodnotu. Údaje si preto usporiadajú do slovníka — svojej kúzelnej knihy pokladov.
Čo sa naučíte
Po skončení kapitoly budete vedieť:
- vytvoriť slovník;
- bezpečne čítať a meniť jeho hodnoty;
- prechádzať kľúče aj hodnoty;
- ukladať do slovníka zložitejšie údaje.
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 zapíšte do zložených zátvoriek {}. Kľúč od hodnoty oddeľte
dvojbodkou a položky čiarkou.
treasures = {
"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ý.
Funkcia len() vráti počet dvojíc kľúč – hodnota:
print(len(treasures))
Prístup k hodnote
Hodnotu získate pomocou kľúča v hranatých zátvorkách:
print(treasures["Meč"])
Výstup:
15
Kým pri zozname by ste použili napríklad index 0, pri slovníku použijete
kľúč "Meč".
Hodnoty v jednom slovníku môžu mať rôzne dátové typy:
student = {
"name": "Marienka",
"age": 15,
"city": "Košice",
"is_wizard": False,
}
print(student["city"])
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.
Prístup cez hranaté zátvorky vyvolá pri neexistujúcom kľúči chybu KeyError:
print(treasures["Sekera"])
Ak chýbajúci kľúč nie je chybou programu, použite metódu get():
print(treasures.get("Sekera")) # None
print(treasures.get("Sekera", 0)) # 0
Druhý argument určuje hodnotu, ktorá sa vráti, ak kľúč neexistuje.
Priradením hodnoty k existujúcemu kľúču pôvodnú hodnotu prepíšeme:
treasures["Meč"] = 25
Ak kľúč ešte neexistuje, rovnakým zápisom vytvoríte novú položku:
treasures["Elixír"] = 5
Slovník teraz obsahuje štyri položky:
print(treasures)
Výstup:
{'Meč': 25, 'Štít': 8, 'Luk': 10, 'Elixír': 5}
Prechádzanie slovníkom
Obyčajný cyklus for prechádza kľúče slovníka:
for item in treasures:
print(item)
Tento cyklus prechádza všetky kľúče v slovníku.
Rovnaký výsledok dostaneme s metódou keys():
for item in treasures.keys():
print(item)
Ak potrebujete iba hodnoty, použite values():
for value in treasures.values():
print(value)
Kľúč aj hodnotu získate naraz pomocou metódy items():
for item, value in treasures.items():
print(item, value)
Názvy premenných item a value si môžete zvoliť sami.
Operátor in zisťuje, či sa medzi kľúčmi nachádza zadaný kľúč:
print("Prsteň" in treasures) # True
print("Sekera" in treasures) # False
Ak chcete hľadať medzi hodnotami, použite treasures.values().
Odstraňovanie položiek
Príkaz del
Ak poznáte existujúci kľúč, položku odstráňte príkazom del:
del treasures["Luk"]
Pri neexistujúcom kľúči del vyvolá chybu KeyError.
Metóda clear()
Metóda clear() odstráni všetky položky, ale samotný slovník zostane existovať:
treasures.clear()
print(treasures) # {}
Ďalšie spôsoby úpravy
Metóda update() pridá viacero položiek naraz. Metóda pop() položku
odstráni a zároveň vráti jej hodnotu.
student = {"name": "Janko", "age": 20}
student.update({"city": "Košice", "age": 21})
old_age = student.pop("age")
print(old_age) # 21
print(student)
Aj pop() môže dostať predvolenú hodnotu, ak kľúč nemusí existovať:
removed = student.pop("points", 0)
Vnorené údaje
Hodnotou môže byť ďalší slovník alebo zoznam. Takto môžete reprezentovať viac študentov naraz:
students = {
"janko": {"age": 20, "courses": ["Python", "Databázy"]},
"marienka": {"age": 21, "courses": ["Python"]},
}
print(students["janko"]["courses"][0]) # Python
Cvičenia
- Vytvorte slovník s tromi predmetmi a ich známkami.
- Vypočítajte priemer hodnôt zo slovníka pomocou
values(). - Vypíšte iba študentov, ktorí majú známku lepšiu než zadaná hranica.
- Uložte pri každom študentovi zoznam predmetov a vypíšte počet jeho predmetov.
Zhrnutie
Janko a Marienka použili slovník ako kúzelnú knihu, ktorá spája jedinečné
kľúče s hodnotami. Kľúče čítame pomocou [] alebo get(), položky
prechádzame pomocou items() a údaje meníme priradením, metódami update()
a pop() alebo príkazom del.