NOVINKA: Začni v IT jako webmaster s komplexním akreditovaným online kurzem Tvůrce WWW stránek. Zjisti více:
NOVINKA: Staň se datovým analytikem od 0 Kč a získej jistotu práce, lepší plat a nové kariérní možnosti. Více informací:

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:

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

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

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:

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:

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

 

Předchozí článek
Tuples a množiny v Pythonu
Všechny články v sekci
Kolekce v Pythonu
Přeskočit článek
(nedoporučujeme)
Vícerozměrné seznamy v Pythonu
Článek pro vás napsal Daniel Zábojník
Avatar
Uživatelské hodnocení:
48 hlasů
Autor se věnuje vývoji (a příležitostně navrhování) výjimečných desktopových a mobilních aplikací, grafickému zpracování a všemu co k tomu patří.
Aktivity