Lekce 3 - Slovníky v Pythonu
V minulé lekci, Tuples a množiny v Pythonu, jsme se zaměřili na tuples a množiny.
V tomto tutoriálu kolekcí v Pythonu se zaměříme na slovníky. Vysvětlíme si, k čemu se používají a čím se od sebe liší. Popíšeme si také základní metody, které k práci s těmito kolekcemi budeme používat.
Slovníky
Slovník (Dictionary) funguje také podobně jako seznam, až na to, že k němu nepřistupujeme jen pomocí indexů, ale i na základě klíčových hodnot různých avšak neměnných datových typů. Index slovníků nazýváme klíč. Na pořadí jednotlivých položek ve slovníku nezáleží.
Data v sekvenci jsou uložena speciálním způsobem, tzv. hashováním. To nám umožňuje přistupovat k prvkům pomocí klíče mnohem rychleji, než kdybychom je podle této vlastnosti hledali např. v obyčejném seznamu. Zatímco u seznamu je potřeba všechny prvky projít a kontrolovat, zda náhodou jejich vlastnost neodpovídá tomu, co hledáme, slovník dokáže pro prvek sáhnout mnohem rychleji díky výpočtu tzv. hashe (otisku). Můžeme si to představit tak, že máme prvky v obyčejném seznamu. Nejsou však bezprostředně za sebou, nějaké indexy nejsou využité vůbec. Finta spočívá v tom, že jsme schopni z klíče zjistit index prvku pomocí hashovací funkce. Pokud budeme mít ve slovníku uložené zaměstnance a klíčem bude jejich jméno, hashovací funkce nám z "Jan Novák" vrátí např. 114. Sáhneme na 114. prvek a hle, je tam Jan Novák. Nemusíme slovník nijak iterovat.
Slovník deklarujeme stejně jako seznam. Hlavní rozdíl je v tom, že
používáme složené závorky a musíme k položkám definovat i jejich
klíče. K tomu používáme operátor dvojtečka :. Slovníky jsou
tedy použity k uložení hodnot v párech klíč:hodnota
(key:value):
oblibeneVeci= {
'homer': 'koblihy',
'marge': 'trouba',
'bart': 'prak',
'lisa': 'saxofon'
}
Zápis položek jsme rozdělili kvůli přehlednosti do více řádků, ale
šlo by to i v jednom. Ve slovníku máme pět hodnot: 'kobliha',
'trouba', 'prak', 'saxofon'. Každá
hodnota patří nějakému klíči ('homer', 'marge',
'bart' a 'lisa'). Hodnoty přiřadíme ke klíči
pomocí dvojtečky (:) a oddělujeme čárkou, která se většinou
píše i za poslední položkou.
Pro práci se slovníkem platí to samé, co jsme si ukazovali u seznamu:
oblibeneVeci= {
'homer': 'koblihy',
'marge': 'trouba',
'bart': 'prak',
'lisa': 'saxofon'
}
print(f"Homer má rád {oblibeneVeci['homer']}")
Namísto zápisu oblibeneVeci[0] jsme použili klíč typu
string. Velkou výhodou použití slovníku je lepší
čitelnost, kdy přímo vidíme, jakou hodnotu ze slovníku
dostáváme. Zatímco u číselných indexů možná ani nevíme, o jakou
hodnotu jde. Každý klíč musí být unikátní, ale hodnoty
takové být nemusí. Páry klíč:hodnota mohou být jakékoliv
neměnné datové typy. Pokud definujeme stejný klíč ve stejném
slovníku vícekrát a s různými hodnotami, bude klíči přiřazena poslední
hodnota.
Přidávání položek
Do slovníku můžeme jednoduše přidávat další položky přiřazením nových klíčů:
oblibeneVeci= {
'homer': 'koblihy',
'marge': 'trouba',
'bart': 'prak',
'lisa': 'saxofon'
}
oblibeneVeci['maggie'] = 'dudlik'
print(f"Homer má rád {oblibeneVeci['homer']}")
print(f"Maggie má ráda {oblibeneVeci['maggie']}")
Stejným způsobem můžeme modifikovat již uložené hodnoty.
Zjištění počtu položek
Pro zjištění počtu položek ve slovníku použijeme globální funkci
len() známou již ze seznamů:
oblibeneVeci= {
'homer': 'koblihy',
'marge': 'trouba',
'bart': 'prak',
'lisa': 'saxofon',
'maggie':'dudlík'
}
print(f'Počet položek: {len(oblibeneVeci)}')
Zjištění zda slovník obsahuje požadovaný klíč
Pomocí operátoru in se zeptáme, zda slovník obsahuje
určitý klíč. V Pythonu 2.x k tomu byla určena metoda
has_key(), která je ale nyní zastaralá:
oblibeneVeci= {
'homer': 'koblihy',
'marge': 'trouba',
'bart': 'prak',
'lisa': 'saxofon',
'maggie':'dudlík'
}
simpson = input("Ahoj, zadej svého oblíbeného Simpsona (z rodiny Simpsonů): ").lower()
if simpson in oblibeneVeci:
print(f"{simpson} má rád {oblibeneVeci[simpson]}.")
else:
print("Hele, tohle není Simpson!")
Výsledek v konzoli:
Konzolová aplikace
Ahoj, zadej svého oblíbeného Simpsona (z rodiny Simpsonů):
homer
homer má rád koblihy.
Metody slovníků
Podobně jako u seznamů existuje i pro slovníky několik dostupných metod. Podívejme se na ty nejdůležitější.
Metoda get()
Metoda get() nabízí další způsob pro získání položky ze
slovníku. Hlavní výhodou této metody je, že nevyhodí žádnou výjimku v
případě, že hledaný klíč ve slovníku není. Místo toho vrátí hodnotu
None nebo některou výchozí hodnotu, specifikovatelnou ve druhém
parametru:
oblibeneVeci= {
'homer': 'koblihy',
'marge': 'trouba',
'bart': 'prak',
'lisa': 'saxofon',
'maggie':'dudlík'
}
print(oblibeneVeci.get('homer'))
print(oblibeneVeci.get('krusty'))
print(oblibeneVeci.get('krusty', 'nikdo'))
Výsledek:
Konzolová aplikace
koblihy
None
nikdo
Metody values(),
keys(), a items()
Pomocí těchto metod můžeme převést slovník na seznam. Můžeme tak vyčlenit hodnoty, klíče nebo dokonce vytvořit seznamy n-tic párů klíč-hodnota:
oblibeneVeci= {
'homer': 'koblihy',
'marge': 'trouba',
'bart': 'prak',
'lisa': 'saxofón',
'maggie':'dudlík'
}
print(oblibeneVeci.values())
print(oblibeneVeci.keys())
print(oblibeneVeci.items())
Výsledek:
Konzolová aplikace
dict_values(['koblihy', 'trouba', 'prak', 'saxofon', 'dudlík'])
dict_keys(['homer', 'marge', 'bart', 'lisa', 'maggie'])
dict_items([('homer', 'koblihy'), ('marge', 'trouba'), ('bart', 'prak'), ('lisa', 'saxofon'), ('maggie', 'dudlík')])
Metoda clear()
Jak samotný název naznačuje, tato metoda "vyčistí" všechny položky ze slovníku.
V příští lekci, Vícerozměrné seznamy v Pythonu, se podíváme na dvourozměrné (2D) a vícerozměrné seznamy, včetně příkladů a seznamů "zubatých".
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 7x (3.88 MB)
Aplikace je včetně zdrojových kódů v jazyce Python
