Slovník v Pythonu v roce 2026: praktický průvodce pro efektivní kód

Python Dictionary

Co je slovník a k čemu slouží

Slovník neboli dictionary patří mezi nejpoužívanější datové struktury v Pythonu a kdo se s jazykem seznamuje trochu déle, dříve nebo později zjistí, že bez něj se prakticky neobejde. Na rozdíl od seznamu, který uchovává hodnoty pod číselnými indexy, pracuje slovník na úplně jiném principu. Ukládá data ve formě dvojic klíč a hodnota, přičemž klíč slouží jako jedinečný identifikátor, pomocí kterého se k dané hodnotě přistupuje. Díky tomu není nutné pamatovat si pořadí prvků nebo jejich pozici, stačí znát klíč a hodnota je okamžitě dostupná.

Představit si to lze na jednoduchém příkladu ze skutečného života. Pokud bychom chtěli uchovat informace o osobě, mohli bychom vytvořit slovník, kde klíčem bude „jméno“, „věk“ nebo „město“, a hodnotou pak konkrétní údaj, například „Jan“, 32 nebo „Brno“. Tento způsob organizace dat je mnohem přehlednější a přirozenější než snaha vše ukládat do seznamu, kde by se člověk musel spoléhat pouze na pořadí položek.

Slovník v Pythonu se zapisuje pomocí složených závorek, přičemž jednotlivé dvojice klíč a hodnota se oddělují dvojtečkou a jednotlivé páry čárkou. Důležitou vlastností je, že klíče musí být jedinečné a zároveň neměnné, což znamená, že jako klíč lze použít například řetězec, číslo nebo n-tici, nikoliv však seznam. Hodnoty naopak mohou být jakéhokoliv datového typu, včetně dalších slovníků, což umožňuje vytvářet i velmi komplexní a vnořené struktury dat.

K čemu se slovník v praxi využívá, je otázka, na kterou existuje celá řada odpovědí. Používá se všude tam, kde je potřeba pracovat s daty, jež mají jasnou logickou vazbu mezi identifikátorem a jeho hodnotou. Typickým příkladem je uchovávání konfiguračních nastavení aplikace, kde klíče představují jednotlivé parametry a hodnoty jejich nastavení. Dále se slovníky hojně využívají při zpracování dat získaných z webových API, protože formát JSON, se kterým se v Pythonu pracuje právě pomocí slovníků, je dnes naprosto standardní pro výměnu informací mezi aplikacemi.

Velkou výhodou slovníku je jeho rychlost při vyhledávání hodnot. Zatímco u seznamu by bylo nutné procházet všechny prvky, dokud by se nenašla shoda, u slovníku stačí znát klíč a přístup k hodnotě je téměř okamžitý díky tomu, že Python interně využívá hashovací tabulky. To má obrovský význam zejména při práci s většími objemy dat, kdy by lineární prohledávání seznamu bylo výrazně pomalejší a méně efektivní.

V neposlední řadě je třeba zmínit, že slovníky jsou v Pythonu měnitelné, což znamená, že je lze po vytvoření upravovat, přidávat nové položky, měnit existující hodnoty nebo naopak položky mazat. Díky této flexibilitě představují ideální nástroj pro dynamickou práci s daty, ať už jde o jednoduché programy, nebo rozsáhlé aplikace, kde je potřeba efektivně organizovat a rychle vyhledávat informace.

Vytváření slovníku a základní syntaxe

Slovník v Pythonu patří mezi nejpoužívanější datové struktury a jeho vytvoření zvládne i naprostý začátečník během několika minut. Základem je pochopení, že slovník ukládá data ve formě dvojic klíč a hodnota, přičemž každý klíč musí být v rámci slovníku jedinečný. Nejjednodušší způsob, jak slovník vytvořit, je použití složených závorek. Stačí napsat prázdné složené závorky a do proměnné se uloží prázdný slovník, který můžeme později naplnit daty. Pokud už při vytváření víme, jaká data budeme potřebovat, můžeme je zapsat rovnou dovnitř závorek ve formátu klíč dvojtečka hodnota, přičemž jednotlivé páry oddělujeme čárkou.

Typickým příkladem je slovník reprezentující osobu, kde klíči mohou být řetězce jako jméno, věk nebo město, a hodnotami jsou konkrétní údaje o dané osobě. Je důležité si uvědomit, že hodnoty ve slovníku mohou být libovolného datového typu – tedy čísla, řetězce, seznamy, ba dokonce i další slovníky. Díky tomu je slovník v Pythonu extrémně flexibilní nástroj, který se dá použít pro reprezentaci téměř jakýchkoli strukturovaných dat, ať už jde o konfigurační soubory, výsledky databázových dotazů nebo data získaná z API.

Kromě zápisu pomocí složených závorek existuje i alternativní způsob vytvoření slovníku pomocí vestavěné funkce dict(). Tato funkce umožňuje vytvořit slovník buď zcela prázdný, nebo naplněný hodnotami zadanými jako klíčové argumenty. Tento přístup je oblíbený zejména tehdy, když jsou klíče slovníku pevně dané a odpovídají platným názvům proměnných v Pythonu, protože zápis je pak přehlednější a čitelnější.

Jakmile máme slovník vytvořený, přichází na řadu přístup k jednotlivým hodnotám. K tomu slouží hranaté závorky, do kterých vložíme příslušný klíč, a Python nám vrátí odpovídající hodnotu. Pokud se pokusíme přistoupit ke klíči, který ve slovníku neexistuje, dostaneme chybu typu KeyError, což je potřeba mít na paměti při práci s neznámými nebo dynamicky generovanými daty. Bezpečnější alternativou je metoda get(), která v případě neexistujícího klíče nevyhodí chybu, ale vrátí výchozí hodnotu, kterou si sami definujeme, případně None.

Přidávání nových položek do slovníku je stejně jednoduché jako čtení – stačí zapsat název proměnné se slovníkem, do hranatých závorek uvést nový klíč a přiřadit mu hodnotu. Pokud daný klíč již ve slovníku existuje, jeho hodnota se jednoduše přepíše novou. Tato vlastnost dělá ze slovníků velmi praktický nástroj pro postupné budování a aktualizaci dat během běhu programu, což využívá naprostá většina reálných python aplikací v roce 2026.

Přístup k hodnotám pomocí klíčů

V Pythonu patří slovník mezi nejpoužívanější datové struktury a přístup k jednotlivým hodnotám pomocí klíčů je základní dovedností, kterou by měl zvládat každý, kdo s tímto jazykem pracuje. Slovník si můžeme představit jako kolekci párů klíč–hodnota, přičemž právě klíč slouží jako jedinečný identifikátor, pomocí kterého se dostaneme k příslušné hodnotě. Na rozdíl od seznamu, kde přistupujeme k prvkům pomocí číselného indexu, u slovníku používáme klíče, což může být řetězec, číslo nebo dokonce n-tice, pokud je neměnná.

Nejběžnějším způsobem, jak získat hodnotu ze slovníku, je zápis pomocí hranatých závorek, do kterých vložíme požadovaný klíč. Pokud máme například slovník `osoba = {jmeno: Jan, vek: 35, mesto: Praha}`, pak výraz `osoba[jmeno]` vrátí hodnotu `Jan`. Tento přístup je rychlý a přehledný, ale je potřeba mít na paměti, že pokud se pokusíme přistoupit ke klíči, který ve slovníku neexistuje, Python vyhodí výjimku `KeyError`. To může způsobit pád programu, pokud na tuto situaci nejsme připraveni.

Právě proto se v praxi často doporučuje využívat metodu `get()`, která je mnohem bezpečnější variantou přístupu k hodnotám. Pokud zavoláme `osoba.get(vek)`, dostaneme hodnotu `35`, ale pokud bychom se dotazovali na neexistující klíč, metoda nevyhodí chybu, nýbrž vrátí `None`. Navíc lze jako druhý parametr metody `get()` zadat výchozí hodnotu, která se vrátí místo `None`, což je velmi praktické při zpracování dat, kde si nejsme jisti, zda daný klíč vůbec existuje. Tento přístup výrazně zvyšuje robustnost kódu a předchází neočekávaným pádům programu.

Dalším důležitým aspektem je ověřování existence klíče před samotným přístupem k hodnotě. K tomu se využívá operátor `in`, který umožňuje jednoduše zjistit, zda se konkrétní klíč ve slovníku nachází. Zápis typu `if jmeno in osoba:` je velmi čitelný a často se používá v kombinaci s podmínkami, aby se předešlo chybám při práci s neúplnými nebo dynamicky generovanými daty.

V roce 2026 zůstává práce se slovníky v Pythonu prakticky beze změny co do základních principů, i když samotný jazyk prošel v posledních letech řadou drobných vylepšení výkonu a syntaxe. Slovník v Pythonu je stále implementován jako hashovací tabulka, díky čemuž je přístup k hodnotám pomocí klíčů extrémně rychlý, typicky s časovou složitostí O(1). To z něj dělá ideální nástroj pro situace, kdy potřebujeme rychlé vyhledávání na základě jedinečného identifikátoru, například při práci s konfiguracemi, databázovými záznamy nebo JSON daty, která se do slovníků převádí naprosto přirozeně.

Pochopení správného přístupu k hodnotám pomocí klíčů je tak základním kamenem efektivní práce s daty v Pythonu a investice času do zvládnutí této problematiky se vyplatí každému, kdo chce psát čistý a spolehlivý kód.

Přidávání a úprava položek

Přidávání nové položky do slovníku patří k nejjednodušším operacím, se kterými se v Pythonu setkáte, a přesto v sobě skrývá pár nuancí, které je dobré si ujasnit hned na začátku. Základní princip spočívá v tom, že slovníku přiřadíte hodnotu pod konkrétním klíčem pomocí hranatých závorek. Pokud máte slovník osoba = {jmeno: Petr, vek: 30} a chcete přidat nový údaj, stačí napsat osoba[mesto] = Brno. Python automaticky pozná, že klíč mesto ve slovníku dosud neexistuje, a proto ho jednoduše vytvoří i s přiřazenou hodnotou. Žádné speciální metody ani složité konstrukce nejsou potřeba, což je jeden z důvodů, proč jsou slovníky mezi programátory tak oblíbené.

Úprava existující položky funguje na úplně stejném principu, jen s tím rozdílem, že klíč už ve slovníku existuje. Pokud tedy napíšete osoba[vek] = 31, Python nepřidá nový klíč, ale prostě přepíše původní hodnotu novou. Právě podle existence klíče se Python rozhoduje, zda se jedná o vytvoření nové položky, nebo o přepsání té stávající, a tato logika platí naprosto univerzálně bez ohledu na to, jak velký nebo složitý slovník máte. Je to zásadní vlastnost slovníku v Pythonu, kterou byste si měli osvojit, protože se s ní budete setkávat neustále, ať už píšete jednoduchý skript nebo rozsáhlejší aplikaci.

Kromě přímého přiřazení hodnoty existuje i metoda update(), která se hodí zejména tehdy, když chcete do slovníku přidat nebo upravit více položek najednou. Stačí zavolat osoba.update({vek: 32, povolani: programator}) a Python projde zadaný slovník, případně jinou iterovatelnou strukturu s páry klíč-hodnota, a podle toho buď aktualizuje existující klíče, nebo přidá nové. Tato metoda je velmi praktická ve chvíli, kdy pracujete s daty načtenými například z externího souboru nebo z API a potřebujete je sloučit s již existujícím slovníkem.

Za zmínku stojí také metoda setdefault(), která se chová trochu jinak než klasické přiřazení. Pokud klíč ve slovníku už existuje, metoda vrátí jeho hodnotu a nic nemění. Pokud klíč neexistuje, vytvoří ho s hodnotou, kterou jí zadáte jako druhý argument, a tuto hodnotu zároveň vrátí. Používá se to typicky v situacích, kdy chcete zajistit, že klíč bude mít vždy nějakou výchozí hodnotu, ale zároveň nechcete přepsat už existující data.

Je dobré mít na paměti, že klíče ve slovníku musí být neměnitelné datové typy, tedy typicky řetězce, čísla nebo n-tice, zatímco hodnotou může být prakticky cokoliv, včetně dalšího slovníku nebo seznamu. Díky tomu můžete vytvářet i vnořené struktury, kde jednotlivé hodnoty samy obsahují další slovníky, což se hodí například při práci s komplexnějšími daty, jako jsou konfigurace nebo záznamy z databáze.

Mazání položek ze slovníku

Mazání položek ze slovníku patří mezi základní operace, se kterými se v Pythonu setká úplně každý, kdo pracuje s daty uloženými ve formě klíč-hodnota. Slovník, anglicky dictionary, je jednou z nejpoužívanějších datových struktur v tomto jazyce a stejně důležitá jako jeho naplňování je i schopnost z něj údaje odebírat, když už nejsou potřeba nebo když se s postupem programu mění.

Nejběžnějším způsobem, jak z Pythonu odstranit konkrétní položku podle klíče, je příkaz del. Pokud máme slovník, řekněme s informacemi o studentovi, kde klíči jsou jméno, věk a obor, stačí napsat del slovnik[vek] a daná dvojice klíč-hodnota z paměti okamžitě zmizí. Je potřeba mít na paměti, že pokud klíč ve slovníku neexistuje, Python vyhodí chybu KeyError, a proto je vhodné buď ověřit existenci klíče předem pomocí operátoru in, nebo použít ošetření výjimek pomocí bloku try except.

Druhou často využívanou metodou je pop(), která se od příkazu del liší tím, že nejen odstraní položku, ale zároveň vrátí její hodnotu, se kterou lze dále pracovat. Syntaxe vypadá následovně: hodnota = slovnik.pop(klic). Velkou výhodou této metody je možnost zadat druhý parametr jako výchozí hodnotu, která se vrátí v případě, že klíč ve slovníku neexistuje, takže se tím elegantně vyhneme neošetřené chybě. Tento přístup je oblíbený zejména tehdy, když programátor potřebuje s odstraněnou hodnotou ještě chvíli pracovat, například ji zalogovat nebo přesunout do jiné struktury.

Pokud je cílem odstranit poslední vloženou dvojici klíč-hodnota, nabízí se metoda popitem(). Ta funguje na principu LIFO, tedy poslední vložený prvek je první odstraněný, což je vlastnost, kterou Python garantuje od verze 3.7, kdy se slovníky staly uspořádanými strukturami zachovávajícími pořadí vložení.

Někdy je potřeba slovník úplně vyprázdnit, aniž bychom ho museli znovu vytvářet jako nový objekt. Na to slouží metoda clear(), která odstraní všechny položky najednou a ponechá po sobě prázdný slovník se stejnou referencí v paměti, což může být důležité, pokud je na daný objekt navázáno více proměnných nebo odkazů v programu.

V praxi je také běžné mazat položky podmíněně, tedy na základě určitého kritéria, což se často řeší pomocí cyklu a takzvané dictionary comprehension, kdy se vytvoří nový slovník obsahující pouze ty položky, které splňují danou podmínku, zatímco ostatní se do nového slovníku jednoduše nezahrnou. Tento přístup je vhodný zejména tehdy, když je potřeba odstranit více položek najednou podle nějaké logiky, a je bezpečnější než mazání přímo za běhu iterace přes původní slovník, což by mohlo vést k chybě za běhu programu, protože Python nedovoluje měnit velikost slovníku v průběhu jeho procházení.

Metody get, keys, values a items

Když pracujeme se slovníky v Pythonu, dříve nebo později narazíme na situaci, kdy potřebujeme bezpečně přistupovat k hodnotám, procházet klíče nebo hodnoty samostatně, případně procházet celý slovník jako dvojice klíč-hodnota najednou. Právě k tomu slouží čtveřice metod, které by měl znát každý, kdo se slovníky pracuje alespoň trochu pravidelně: get(), keys(), values() a items().

Metoda get() je asi nejužitečnější způsob, jak z slovníku vytáhnout hodnotu, aniž bychom riskovali pád programu. Pokud bychom přistupovali k neexistujícímu klíči přes hranaté závorky, Python by okamžitě vyhodil výjimku KeyError a program by spadl, pokud bychom to neošetřili. Metoda get() se chová mnohem shovívavěji – když klíč ve slovníku neexistuje, vrátí jednoduše hodnotu None, místo aby program zhavaroval. Navíc lze jako druhý parametr zadat vlastní výchozí hodnotu, která se vrátí místo None, což se hodí například při počítání výskytů slov nebo při práci s konfiguračními soubory, kde některé klíče mohou, ale nemusí být přítomny. Zápis vypadá třeba takto: `slovnik.get(klic, výchozí hodnota)`. Tento přístup je v praxi mnohem bezpečnější a čitelnější než neustálé testování pomocí podmínky `if klic in slovnik`.

Metoda keys() nám vrátí všechny klíče, které se ve slovníku nacházejí, a to ve formě speciálního objektu podobného seznamu, přes který lze iterovat pomocí cyklu for. Tento objekt se nazývá dict_keys a i když nejde o klasický seznam, dá se s ním pracovat podobně – lze ho převést na list() nebo procházet v cyklu. Podobně funguje i metoda values(), ta ale místo klíčů vrací všechny hodnoty uložené ve slovníku, tedy objekt typu dict_values. Tato metoda se hodí například tehdy, když nás zajímá jen obsah slovníku bez ohledu na to, pod jakými klíči je uložen, třeba při součtu všech číselných hodnot nebo při hledání maximální hodnoty.

Nejkomplexnější z této čtveřice je metoda items(), která vrací dvojice klíč-hodnota ve formě tzv. tuple, tedy needitovatelných párů. Díky tomu můžeme jedním cyklem for procházet zároveň klíče i hodnoty, což se v praxi využívá velmi často, například takto: `for klic, hodnota in slovnik.items():`. Tento zápis je elegantní, přehledný a vyhýbá se zbytečnému opakovanému vyhledávání hodnot podle klíčů uvnitř cyklu.

Všechny čtyři metody mají jednu společnou vlastnost, kterou je dobré mít na paměti – vrácené objekty jsou dynamické, tedy odrážejí aktuální stav slovníku i po jeho případné změně. To znamená, že pokud slovník po vytvoření pohledu pomocí keys(), values() nebo items() upravíme, samotný pohled se automaticky aktualizuje. Této vlastnosti se říká view objekt a v praxi ušetří spoustu starostí s nekonzistentními daty.

Slovník v Pythonu je jako pečlivě uspořádaná knihovna, kde každý klíč otevírá dveře k přesně té hodnotě, kterou potřebujeme, aniž bychom museli procházet celou místnost.

Bohumil Kadeřábek

Procházení slovníku pomocí smyčky for

Procházení slovníku pomocí smyčky for patří k naprostým základům, které by měl znát každý, kdo se s Pythonem chce alespoň trochu blíže seznámit. Slovník, tedy datový typ dict, uchovává data ve formátu klíč a hodnota, a právě proto se způsob jeho procházení mírně liší od procházení seznamu nebo řetězce. Když napíšeme jednoduchý cyklus for klic in slovnik:, Python nám automaticky nabídne postupně všechny klíče, které se ve slovníku nacházejí. Toho se dá využít velmi elegantně, protože pokud známe klíč, snadno se dostaneme i k odpovídající hodnotě pomocí zápisu slovnik[klic].

Python slovník (dict) – přehled vlastností a metod (aktuální pro Python 3.13, 2026)
Vlastnost / Metoda Popis Příklad použití Návratová hodnota
Vytvoření slovníku Definice pomocí složených závorek nebo funkce dict() osoba = {"jmeno": "Jan", "vek": 30} Objekt typu dict
get() Bezpečný přístup k hodnotě bez vyvolání chyby KeyError osoba.get("jmeno", "neznámé") "Jan"
keys() Vrátí všechny klíče slovníku osoba.keys() dict_keys(['jmeno', 'vek'])
values() Vrátí všechny hodnoty slovníku osoba.values() dict_values(['Jan', 30])
items() Vrátí dvojice klíč-hodnota osoba.items() dict_items([('jmeno', 'Jan'), ('vek', 30)])
update() Aktualizuje slovník o nové páry nebo přepíše existující osoba.update({"vek": 31}) None (slovník se mění na místě)
pop() Odebere klíč a vrátí jeho hodnotu osoba.pop("vek") 30
popitem() Odebere a vrátí poslední vložený pár klíč-hodnota osoba.popitem() ('jmeno', 'Jan')
setdefault() Vrátí hodnotu klíče, pokud neexistuje, vytvoří ho s výchozí hodnotou osoba.setdefault("mesto", "Praha") "Praha"
clear() Vymaže všechny položky slovníku osoba.clear() {} (prázdný slovník)
Slovníková komprehenze Rychlé vytvoření slovníku pomocí výrazu {x: x**2 for x in range(5)} {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
Sloučení slovníků (operátor |) Spojení dvou slovníků do jednoho (od Python 3.9) {"a": 1} | {"b": 2} {'a': 1, 'b': 2}
Zachování pořadí klíčů Od verze Python 3.7 slovníky zachovávají pořadí vložení list({"b":1,"a":2}.keys()) ['b', 'a']
Časová složitost přístupu Průměrná časová složitost pro vyhledání klíče osoba["jmeno"] O(1)

Mnoho začátečníků si však neuvědomí, že existuje ještě pohodlnější a čitelnější způsob, jak pracovat s oběma částmi najednou. Slouží k tomu metoda .items(), která vrací dvojice klíč a hodnota v podobě takzvaných tuplů. Díky tomu můžeme psát cyklus ve tvaru for klic, hodnota in slovnik.items(): a v těle cyklu pak pracovat přímo s oběma proměnnými, aniž bychom museli slovník znovu indexovat. Tento přístup je nejen přehlednější, ale i výkonnostně efektivnější, protože se Python nemusí opakovaně dotazovat na hodnotu podle klíče.

Kromě metody items() nabízí Python i metody .keys() a .values(), které se hodí v situacích, kdy nás zajímá pouze jedna strana slovníku. Metoda keys() vrací všechny klíče, zatímco values() vrací pouze hodnoty bez ohledu na to, ke kterému klíči patří. I když samotné použití klic in slovnik.keys() je funkčně stejné jako klic in slovnik, protože výchozí iterace přes slovník probíhá právě přes klíče, mnoho programátorů preferuje explicitní zápis kvůli lepší čitelnosti kódu, zvlášť když se s ním pracuje v týmu nebo se kód vrací po delší době.

Při procházení slovníku je důležité pamatovat na to, že pořadí položek odpovídá pořadí, ve kterém byly do slovníku vloženy, a to od verze Pythonu 3.7 platí jako oficiálně garantované chování. To znamená, že pokud slovník vytváříme postupným přidáváním klíčů, můžeme se spolehnout, že cyklus for je projde přesně ve stejném pořadí.

Další užitečnou technikou je kombinace cyklu for s podmínkami, kdy během procházení slovníku filtrujeme pouze určité položky podle hodnoty nebo klíče. Typickým příkladem je situace, kdy chceme vypsat pouze ty položky, jejichž hodnota přesahuje určitou mez, nebo naopak chceme hodnoty upravit a uložit do nového slovníku pomocí takzvané dictionary comprehension, což je pokročilejší, ale velmi oblíbená technika mezi zkušenějšími programátory.

Je také dobré si dát pozor na to, že pokud během procházení slovníku pomocí for cyklu chceme měnit jeho velikost, tedy přidávat nebo odebírat klíče, Python takové chování neumožňuje a vyhodí chybu. V takových případech je vhodnější vytvořit si kopii slovníku nebo pracovat se seznamem klíčů získaným předem.

Vnořené slovníky a jejich použití

Vnořené slovníky patří k nejužitečnějším konstrukcím, se kterými se v Pythonu setkáte, jakmile začnete pracovat s reálnějšími daty. Zatímco jednoduchý slovník vám umožní ukládat páry klíč-hodnota, praxe si často žádá mnohem složitější strukturu, kdy hodnotou uloženou pod klíčem není číslo nebo řetězec, ale další slovník. Tímto způsobem lze modelovat data, která mají přirozeně hierarchickou povahu, jako jsou třeba informace o zaměstnancích, konfigurace aplikací, nebo výsledky importované z JSON souboru.

Představte si situaci, kdy potřebujete evidovat několik osob a ke každé z nich uchovávat věk, město a zaměstnání. Místo toho, abyste vytvářeli tři samostatné slovníky pro každý atribut, je mnohem přehlednější vytvořit jeden slovník, kde klíčem bude jméno osoby a hodnotou bude opět slovník obsahující její jednotlivé údaje. Zápis by mohl vypadat takto:

osoby = {Petr: {vek: 34, mesto: Brno, povolani: vývojář}, Jana: {vek: 28, mesto: Praha, povolani: designérka}}

Přístup k vnořeným hodnotám probíhá řetězením hranatých závorek. Pokud chcete zjistit, ve kterém městě žije Jana, napíšete `osoby[Jana][mesto]`, což vrátí hodnotu Praha. Tento princip se dá rozšiřovat prakticky donekonečna – slovník může obsahovat slovník, který obsahuje další slovník, a tak dále, i když z hlediska čitelnosti kódu je vhodné hloubku vnoření udržovat v rozumných mezích.

Při práci s vnořenými slovníky je důležité dávat pozor na bezpečný přístup k datům, protože pokus o přístup k neexistujícímu klíči vyvolá výjimku `KeyError`. Proto se doporučuje využívat metodu `get()`, která umožňuje zadat výchozí hodnotu, pokud klíč neexistuje. Příklad `osoby.get(Karel, {}).get(mesto, neznámé)` bezpečně ošetří situaci, kdy osoba Karel ve slovníku vůbec není.

Procházení vnořených slovníků se obvykle řeší pomocí vnořených cyklů `for`. Vnější cyklus prochází klíče hlavního slovníku, zatímco vnitřní cyklus pracuje s položkami vnitřního slovníku. Takto lze snadno vypsat všechny osoby spolu s jejich atributy:

for jmeno, udaje in osoby.items(): for klic, hodnota in udaje.items(): print(jmeno, klic, hodnota)

Vnořené slovníky se hojně využívají také při zpracování dat z API, protože formát JSON, který se dnes při komunikaci mezi aplikacemi používá téměř univerzálně, se do Pythonu automaticky převádí právě na kombinaci slovníků a seznamů. Když tedy stahujete data z webové služby, velmi pravděpodobně budete pracovat s vícevrstvou strukturou, kde se slovníky mísí se seznamy a naopak.

Je také vhodné zmínit, že modifikace vnořených slovníků vyžaduje trochu opatrnosti, zejména pokud pracujete s kopiemi. Běžné kopírování pomocí `copy()` vytváří takzvanou mělkou kopii, což znamená, že vnořené slovníky zůstávají propojené s originálem. Pokud potřebujete skutečně nezávislou kopii včetně všech vnořených struktur, je nutné použít modul `copy` a jeho funkci `deepcopy()`, která zajistí, že změny v kopii se nijak neprojeví v původním slovníku.

Slovníkové komprehenze v Pythonu

Slovníkové komprehenze patří k nejužitečnějším nástrojům, které Python nabízí, pokud chceme rychle a přehledně vytvořit nový slovník na základě nějaké existující sekvence nebo jiného slovníku. Místo toho, abychom psali klasický cyklus for s postupným přidáváním klíčů a hodnot, můžeme celý proces zapsat do jediného řádku, což kód zpřehlední a často i zrychlí. Princip je podobný jako u komprehenzí seznamů, jen s tím rozdílem, že výsledkem není list, ale slovník se strukturou klíč–hodnota.

Základní syntaxe vypadá tak, že do složených závorek zapíšeme výraz pro klíč, dvojtečku, výraz pro hodnotu a následně cyklus for procházející nějakou iterovatelnou strukturu. Typickým příkladem je vytvoření slovníku, kde klíčem bude číslo a hodnotou jeho druhá mocnina. Stačí napsat něco jako {x: x**2 for x in range(10)} a Python během okamžiku vygeneruje kompletní slovník v Pythonu s deseti položkami. Tento zápis je nejen kratší, ale i čitelnější, protože na první pohled poznáme, jaký vztah mezi klíčem a hodnotou očekáváme.

Velkou předností slovníkových komprehenzí v Pythonu je možnost přidat podmínku, která filtruje, jaké prvky se do výsledného slovníku vůbec dostanou. Pokud bychom chtěli pouze sudá čísla a jejich mocniny, stačí za cyklus for připsat podmínku if x % 2 == 0. Python tak v jednom kroku prochází zdrojová data, aplikuje transformaci a zároveň rozhoduje, které položky mají smysl zahrnout. To je obrovská výhoda oproti klasickému zápisu, kde bychom museli psát samostatný podmiňovací blok uvnitř cyklu.

Komprehenze se často využívají i při práci se dvěma existujícími sekvencemi, například pokud máme seznam klíčů a seznam hodnot a chceme je spojit dohromady pomocí funkce zip. Zápis {k: v for k, v in zip(klice, hodnoty)} je elegantní způsob, jak z dvou samostatných seznamů rychle poskládat funkční slovník bez zbytečného opakování kódu. Tento přístup se hodí především tehdy, když data pocházejí z různých zdrojů a je potřeba je propojit do jedné logické struktury.

Nelze opomenout ani situace, kdy chceme transformovat existující slovník na nový, například prohodit klíče a hodnoty nebo upravit všechny hodnoty podle nějakého pravidla. Zápis {hodnota: klic for klic, hodnota in puvodni_slovnik.items()} ukazuje, jak snadno lze pracovat s metodou items a získat tak přístup k oběma částem každé položky najednou.

Je ovšem dobré mít na paměti, že přehnaně složité komprehenze mohou naopak čitelnost kódu zhoršit, a pokud logika obsahuje více podmínek nebo vnořených cyklů, je často lepší vrátit se ke standardnímu zápisu s cyklem for, který je pro ostatní programátory srozumitelnější a snadněji se udržuje.

Sloučení slovníků pomocí operátoru union

Od verze Python 3.9 přibyla do jazyka velmi praktická možnost, jak slučovat dva slovníky pomocí operátoru union, konkrétně pomocí symbolu svislé čáry |. Dříve programátoři museli sahat po metodě update(), po rozbalovacím operátoru s dvěma hvězdičkami (**) uvnitř nového slovníku, případně po modulu collections a jeho pomocných nástrojích. Nový operátor tuto práci výrazně zjednodušil a zpřehlednil, protože zápis je nyní intuitivní a čitelný na první pohled, což ocení jak začátečníci, tak zkušení vývojáři pracující s rozsáhlejšími datovými strukturami.

Princip je jednoduchý – máte-li dva slovníky, řekněme slovnik_a a slovnik_b, stačí napsat slovnik_a | slovnik_b a Python vám vrátí nový slovník obsahující klíče a hodnoty z obou původních slovníků. Pokud se v obou slovnících vyskytuje stejný klíč, hodnota z druhého slovníku má vždy přednost a přepíše hodnotu z prvního slovníku. Tento chování je potřeba mít na paměti zejména při práci s konfiguračními daty nebo výchozími nastaveními, kde pořadí slovníků v zápisu rozhoduje o výsledném obsahu.

Kromě klasického operátoru | existuje i jeho zkrácená varianta |=, která funguje obdobně jako u čísel nebo množin. Pomocí zápisu slovnik_a |= slovnik_b dojde k tomu, že se slovník slovnik_a přímo aktualizuje o obsah slovníku slovnik_b, aniž by bylo nutné vytvářet novou proměnnou. Jde tedy o obdobu metody update(), ale zapsanou mnohem stručněji a v duchu moderního pythonského stylu psaní kódu.

Výhodou tohoto přístupu je také to, že funguje nezávisle na typu hodnot uvnitř slovníku – může jít o čísla, řetězce, seznamy, další slovníky nebo třeba vlastní objekty. Python při slučování nekontroluje obsah hodnot, pouze porovnává klíče, což zápis dělá univerzálním a použitelným v naprosté většině běžných situací, se kterými se vývojáři při práci s daty setkávají.

Je však důležité zmínit, že operátor union funguje pouze mezi dvěma slovníky a nelze jej použít třeba mezi slovníkem a jiným typem jako je seznam nebo množina – v takovém případě Python vyhodí chybu TypeError. Pokud tedy pracujete s daty, která nejsou striktně ve formátu slovníku, je potřeba je nejprve převést, jinak sloučení neproběhne a program skončí s výjimkou.

V praxi se tento zápis často využívá při kombinování výchozích a uživatelských nastavení, při spojování výsledků z různých zdrojů dat nebo při rychlém sestavování slovníků z více částí kódu. Díky své jednoduchosti a čitelnosti se operátor union rychle stal oblíbenou součástí moderního psaní kódu v Pythonu a v roce 2026 jej najdete prakticky v každém novějším projektu, který pracuje se slovníky.

Rozdíly mezi slovníkem a seznamem

V Pythonu patří slovník a seznam mezi nejpoužívanější datové struktury, ale jejich vnitřní logika i způsob použití se zásadně liší. Zatímco seznam (list) uchovává prvky v pevně daném pořadí a k jednotlivým hodnotám se přistupuje pomocí číselného indexu začínajícího od nuly, slovník (dict) pracuje na principu dvojic klíč–hodnota, kde se k datům nedostáváme přes pozici, ale přes unikátní klíč. Tento rozdíl má dopad na téměř všechny aspekty práce s daty, od rychlosti vyhledávání až po způsob, jakým se prvky přidávají nebo mažou.

Když si vezmeme jednoduchý seznam, třeba `ovoce = [jablko, hruška, banán]`, k prvnímu prvku se dostaneme zápisem `ovoce[0]`. Pořadí je zde důležité a pokud bychom prvky přeházeli, změnil by se i výsledek přístupu podle indexu. Naproti tomu u slovníku, například `ceny = {jablko: 25, hruška: 30, banán: 18}`, se k hodnotě dostaneme zápisem `ceny[jablko]`, přičemž na pořadí zápisu klíčů vůbec nezáleží z hlediska funkčnosti kódu. Klíče musí být unikátní a neměnitelné, tedy typicky řetězce, čísla nebo n-tice, zatímco hodnoty mohou být jakéhokoliv typu, včetně dalších slovníků nebo seznamů.

Dalším podstatným rozdílem je rychlost vyhledávání. Slovník v Pythonu je implementován pomocí hashovací tabulky, takže vyhledání hodnoty podle klíče je extrémně rychlé a jeho časová složitost je v průměru konstantní, tedy O(1). U seznamu je situace jiná – pokud bychom chtěli najít konkrétní prvek podle hodnoty, musí se projít prvky postupně, což znamená lineární časovou složitost O(n). To znamená, že pro velké objemy dat, kde je potřeba často vyhledávat podle nějakého identifikátoru, je slovník mnohem efektivnější volbou než seznam.

Rozdílný je i způsob, jakým se s oběma strukturami pracuje při iteraci. Při procházení seznamu pomocí cyklu `for` dostáváme postupně jednotlivé hodnoty, zatímco při procházení slovníku standardně iterujeme přes klíče, případně můžeme pomocí metody `items()` získat současně klíč i hodnotu. To je výhodné například při zpracování strukturovaných dat, kdy potřebujeme pracovat s párovými informacemi, jako je jméno a věk, produkt a cena nebo uživatel a jeho nastavení.

Také z hlediska použití v praxi mají obě struktury jiné opodstatnění. Seznam se hodí tam, kde je důležité pořadí prvků a kde budeme často procházet celou kolekci od začátku do konce, například seznam úkolů nebo posloupnost čísel. Slovník je naopak ideální tam, kde potřebujeme rychlý přístup k datům podle nějakého jedinečného identifikátoru, jako je ID uživatele, název produktu nebo klíčové slovo. V roce 2026 se slovníky v Pythonu běžně využívají i při práci s konfiguračními soubory, JSON daty nebo při zpracování výsledků z API, kde je struktura klíč–hodnota naprosto přirozená a odpovídá reálnému modelu dat.

Praktické tipy a časté chyby

Při každodenní práci se slovníky v Pythonu se objevuje několik chyb, které dělají naprosto všichni, ať už jde o začátečníky nebo lidi, co s jazykem pracují už roky. Jednou z nejčastějších je pokus o přístup k neexistujícímu klíči pomocí hranatých závorek. Pokud napíšete `slovnik['klic']` a takový klíč tam není, Python vyhodí KeyError a program spadne. Řešením je buď použít metodu `get()`, která vrátí `None` nebo vámi zadanou výchozí hodnotu místo pádu programu, anebo si klíč nejdřív ověřit pomocí `in`. Tenhle zvyk se vyplatí zautomatizovat, protože v reálném kódu, kde data přicházejí třeba z API nebo od uživatele, nikdy nemáte stoprocentní jistotu, že klíč skutečně existuje.

Další oblíbenou chybou je záměna slovníku a seznamu tam, kde to logicky nedává smysl. Někteří programátoři si vytvoří seznam dvojic a pak se diví, proč nemůžou přistupovat k hodnotám podle klíče jako u slovníku. Je dobré si hned na začátku promyslet, jestli potřebujete rychlé vyhledávání podle klíče, nebo spíš zachování pořadí a možnost duplicit – od toho se odvíjí, jestli sáhnete po slovníku nebo po jiné datové struktuře. Mimochodem, od Pythonu 3.7 si slovník pořadí vložených prvků pamatuje také, takže tenhle argument dnes už tolik neplatí, ale spousta lidí to pořád netuší a rozhoduje se podle zastaralých informací.

Velký problém nastává i při iteraci přes slovník, když se ho snažíte měnit přímo během cyklu `for`. Pokud za běhu smyčky přidáváte nebo mažete klíče, Python vyhodí RuntimeError s hláškou o změně velikosti slovníku během iterace. Bezpečné řešení je iterovat přes kopii klíčů, třeba pomocí `list(slovnik.keys())`, a teprve v té kopii provádět úpravy původního slovníku.

Časnou chybou bývá i špatné pochopení toho, že klíče slovníku musí být neměnitelné (hashovatelné) typy. Zkoušet použít jako klíč seznam skončí chybou, protože seznam je měnitelný. Místo toho se často používá tuple, pokud potřebujete složený klíč, třeba souřadnice bodu.

Praktický tip, který se vyplatí zapamatovat, je používání metody `setdefault()` nebo `defaultdict` z modulu `collections`, pokud potřebujete počítat výskyty nebo seskupovat data podle klíče. Ušetří to spoustu opakovaného kódu s kontrolou existence klíče. Také je dobré vědět, že porovnávání dvou slovníků operátorem `==` funguje podle obsahu, nikoli podle pořadí klíčů, což je vlastnost, kterou spousta lidí objeví až omylem.

Nakonec se vyplatí dávat pozor na kopírování slovníků – mělká kopie pomocí `copy()` nezkopíruje vnořené struktury, takže při složitějších datech je vhodnější použít `deepcopy()` z modulu `copy`, jinak se snadno stane, že úprava jednoho slovníku nečekaně ovlivní i ten druhý.

Našli jste v článku chybu?

Publikováno: 27. 08. 2026

Kategorie: Programování a vývoj