10 užitečných metod slovníku Pythonu
Jak efektivně pracovat se slovníky v Pythonu
Chcete se naučit, jak plně využít potenciál slovníků v Pythonu? Tento průvodce vám ukáže, jak pomocí metod slovníku provádět čtení, úpravy a další běžné úkony. Probereme si základy a následně si vytvoříme ukázkový slovník, který budeme modifikovat s pomocí různých metod.
Pojďme na to...
Základní informace o slovnících v Pythonu
Slovníky jsou klíčové datové struktury v Pythonu, které slouží k ukládání dat ve formě párů klíč-hodnota. Umožňují definovat vazby mezi klíči a jejich odpovídajícími hodnotami.
Klíče ve slovníku musí být unikátní a hashovatelné. Pro vyhledání hodnoty lze použít klíč nebo využít zabudované metody, které si brzy ukážeme.
Slovník v Pythonu můžete vytvořit inicializací s páry klíč-hodnota nebo začít s prázdným slovníkem a páry postupně přidávat.
>>> slovnik1 = {'jazyk':'Python','libi_se':True}
>>> type(slovnik1)
<class 'dict'>
# Alternativní způsob:
>>> slovnik1 = {}
>>> slovnik1['jazyk']='Python'
>>> slovnik1['libi_se']=True
Metody slovníku pro běžné operace
Ujistěte se, že máte nainstalovaný Python verze 3.7 nebo novější, abyste mohli kódovat spolu s příklady. Můžete použít Python REPL nebo online editor.
>>> osoba = {'jmeno':'Alice',
... 'mesto':'Praha',
... 'zajem':'Programovani',
... 'profese':'Vyvojar'
... }
Nyní, když máme inicializovaný slovník, můžeme se podívat na různé metody, které s ním můžeme používat.
Získání klíčů slovníku pomocí metody `keys()`
Častým úkolem při práci se slovníky je potřeba získat seznam všech klíčů, hodnot nebo párů klíč-hodnota. Pro získání klíčů slovníku použijeme metodu `keys()`:
>>> osoba.keys() dict_keys(['jmeno', 'mesto', 'zajem', 'profese'])
Získání hodnot slovníku pomocí metody `values()`
Metoda `values()` vrací všechny hodnoty uložené ve slovníku a je užitečná, pokud s těmito hodnotami potřebujete dále pracovat.
Získejme všechny hodnoty ze slovníku `osoba`:
>>> osoba.values() dict_values(['Alice', 'Praha', 'Programovani', 'Vyvojar'])
Získání párů klíč-hodnota pomocí metody `items()`
Metoda `items()` vrací seznam párů klíč-hodnota. Voláním této metody na slovníku `osoba` získáme seznam n-tic klíč-hodnota:
>>> osoba.items()
dict_items([('jmeno', 'Alice'), ('mesto', 'Praha'), ('zajem', 'Programovani'),
('profese', 'Vyvojar')])
Získání mělké kopie pomocí metody `copy()`
Metoda `copy()` vytvoří mělkou kopii slovníku.
>>> osoba_kopie = osoba.copy()
Proměnná `osoba_kopie` nyní obsahuje mělkou kopii slovníku `osoba`. Upravme tuto kopii tak, že změníme hodnotu klíče 'jmeno' na 'Bob'.
>>> osoba_kopie['jmeno'] = 'Bob' >>> osoba_kopie
Když se podíváme na obsah slovníku `osoba_kopie`, vidíme, že hodnota pro klíč 'jmeno' byla změněna na 'Bob'.
{
'jmeno': 'Bob',
'mesto': 'Praha',
'zajem': 'Programovani',
'profese': 'Vyvojar'
}
Původní slovník `osoba` však zůstal nezměněn.
>>> osoba
{
'jmeno': 'Alice',
'mesto': 'Praha',
'zajem': 'Programovani',
'profese': 'Vyvojar'
}
Nastavení výchozích hodnot pomocí metody `setdefault()`
Při práci se slovníky se často setkáváme s výjimkou `KeyError`, pokud klíč ve slovníku neexistuje. Zkusme například získat přístup k neexistujícímu klíči 'vek':
>>> osoba['vek'] Traceback (most recent call last): File "<stdin>", line 1, in <module> KeyError: 'vek'
Těmto chybám se můžeme vyhnout použitím metod `setdefault()` a `get()` namísto přímého přístupu k hodnotě.
Metoda `setdefault(key)` vrací `slovnik['key']`, pokud klíč ve slovníku existuje.
>>> osoba.setdefault('jmeno')
'Alice'
Pokud klíč neexistuje, přidá ho do slovníku s výchozí hodnotou `None`.
>>> osoba.setdefault('adresa')
>>> osoba
Klíč 'adresa' ve slovníku `osoba` původně nebyl. Nyní je vidět, že byl přidán s výchozí hodnotou `None`.
{
'jmeno': 'Alice',
'mesto': 'Praha',
'zajem': 'Programovani',
'profese': 'Vyvojar',
'adresa': None
}
Nyní můžeme klíči 'adresa' přiřadit nějakou hodnotu:
>>> osoba['adresa'] = "Ulice 123"
>>> osoba
{
'jmeno': 'Alice',
'mesto': 'Praha',
'zajem': 'Programovani',
'profese': 'Vyvojar',
'adresa': 'Ulice 123'
}
Můžeme také zadat výchozí hodnotu při volání metody:
>>> osoba.setdefault('zeme','CR')
'CR'
>>> osoba
Protože klíč 'zeme' ve slovníku `osoba` původně nebyl, byl přidán s hodnotou 'CR'.
{
'jmeno': 'Alice',
'mesto': 'Praha',
'zajem': 'Programovani',
'profese': 'Vyvojar',
'adresa': 'Ulice 123',
'zeme': 'CR'
}
Získání konkrétní hodnoty pomocí metody `get()`
Metoda `get()` vrací hodnotu odpovídající danému klíči. Volitelně můžeme zadat i výchozí hodnotu, která se vrátí, pokud klíč ve slovníku není nalezen.
Pokud se pokusíme získat hodnotu klíče 'jmeno', dostaneme 'Alice', protože klíč ve slovníku existuje:
>>> osoba.get('jmeno')
'Alice'
Slovník `osoba` nemá klíč 'prumer'. Pokud se pokusíme získat jeho hodnotu, v Python REPL nic nedostaneme, ale pokud ji vytiskneme, obdržíme `None`.
>>> osoba.get('prumer')
>>> print(osoba.get('prumer'))
None
Pokud však zadáme volitelnou výchozí hodnotu, získáme tuto hodnotu namísto `None`.
>>> osoba.get('prumer','nenalezeno')
'nenalezeno'
Metoda `get()` však klíč 'prumer' do slovníku nepřidává.
>>> osoba
{
'jmeno': 'Alice',
'mesto': 'Praha',
'zajem': 'Programovani',
'profese': 'Vyvojar',
'adresa': 'Ulice 123',
'zeme': 'CR'
}
Rozdíl mezi metodami `setdefault()` a `get()`
Ačkoli obě metody, `setdefault()` i `get()`, lze použít ke zpracování výjimek `KeyError`, shrňme si, v čem se liší:
- `slovnik.setdefault(key, hodnota)` přidá klíč s hodnotou `hodnota` jako výchozí hodnotu. Pokud `hodnota` není zadána, klíč bude přidán s výchozí hodnotou `None`.
- `slovnik.get(key, hodnota)` vrátí hodnotu odpovídající klíči ze slovníku. Pokud klíč neexistuje, vrátí se `hodnota` (pokud je zadána) nebo `None`, ale klíč se do slovníku nepřidá.
Pro lepší zpracování chyb `KeyError` můžete v Pythonu také použít `defaultdict`.
Aktualizace obsahu slovníku pomocí metody `update()`
Existující slovník můžete aktualizovat pomocí párů klíč-hodnota z jiného slovníku. K aktualizaci obsahu můžeme použít metodu `update()` i s libovolným iterovatelným objektem.
Definujme si slovník `vice_informaci`. Poté aktualizujeme slovník `osoba` s obsahem ze slovníku `vice_informaci`:
>>> vice_informaci = {'hobby':'zpev', 'oblibene':'sladkosti'}
>>> osoba.update(vice_informaci)
Z výstupu níže vidíme, že do slovníku `osoba` byly přidány klíče 'hobby' a 'oblibene'.
>>> osoba
{
'jmeno': 'Alice',
'mesto': 'Praha',
'zajem': 'Programovani',
'profese': 'Vyvojar',
'adresa': 'Ulice 123',
'zeme': 'CR',
'hobby': 'zpev',
'oblibene': 'sladkosti'
}
Odstranění poslední přidané položky pomocí metody `popitem()`
Pro odstranění naposledy přidaného páru klíč-hodnota použijeme metodu `popitem()`.
>>> osoba.popitem()
('oblibene', 'sladkosti')
Voláním metody `popitem()` na slovníku `osoba` se vrátí pár klíč-hodnota ('oblibene', 'sladkosti'), což byla poslední přidaná položka. Zároveň se tato položka ze slovníku odstraní.
Můžeme to ověřit kontrolou obsahu slovníku:
>>> osoba
{
'jmeno': 'Alice',
'mesto': 'Praha',
'zajem': 'Programovani',
'profese': 'Vyvojar',
'adresa': 'Ulice 123',
'zeme': 'CR',
'hobby': 'zpev'
}
Odstranění položky slovníku pomocí metody `pop()`
Metoda `popitem()` odstraňuje a vrací poslední pár klíč-hodnota. Pokud však potřebujeme odstranit i jiné položky, použijeme metodu `pop(key)`. Vrátí hodnotu odpovídající klíči a zároveň odstraní pár klíč-hodnota ze slovníku.
Příklad:
>>> osoba.pop('hobby')
'zpev'
Položka odpovídající klíči 'hobby' byla odstraněna a ve slovníku se již nenachází.
>>> osoba
{
'jmeno': 'Alice',
'mesto': 'Praha',
'zajem': 'Programovani',
'profese': 'Vyvojar',
'adresa': 'Ulice 123',
'zeme': 'CR'
}
Pokud zadáme klíč, který neexistuje, obdržíme výjimku `KeyError`:
>>> osoba.pop('vek')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'vek'
Výjimka `KeyError` nastala, protože klíč 'vek' se ve slovníku `osoba` nenachází.
Na rozdíl od metody `pop()` u seznamů, která ve výchozím nastavení odstraňuje poslední položku, metoda `pop()` u slovníku vyžaduje zadání klíče. Pokud klíč neposkytneme, obdržíme chybu.
>>> osoba.pop() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: pop expected at least 1 argument, got 0
Odstranění všech položek slovníku pomocí metody `clear()`
Metody `pop()` a `popitem()` odstraňují vždy jen jeden pár klíč-hodnota. Pokud potřebujeme odstranit všechny položky ze slovníku, použijeme metodu `clear()`.
>>> osoba.clear()
>>> osoba
{}
Voláním metody `clear()` na slovníku `osoba` se odstraní všechny páry klíč-hodnota a slovník je nyní prázdný.
Shrnutí metod slovníku v Pythonu

Zde je rychlý přehled metod slovníku, které jsme se naučili:
| Metoda | Syntaxe | Popis |
| keys() | slovnik1.keys() | Vrací klíče slovníku `slovnik1` |
| values() | slovnik1.values() | Vrací hodnoty slovníku `slovnik1` |
| items() | slovnik1.items() | Vrací seznam všech párů klíč-hodnota v `slovnik1` |
| copy() | slovnik1.copy() | Vytvoří mělkou kopii slovníku `slovnik1` |
| setdefault() | slovnik1.setdefault(key, default_value) | - Přidá klíč s volitelnou hodnotou `default_value` (výchozí hodnota je `None`), pokud klíč neexistuje - Vrací `slovnik1[key]`, pokud klíč existuje |
| get() | slovnik1.get(key, default_value) | - Vrací `slovnik1[key]`, pokud klíč existuje; jinak vrátí `default_value` - Pokud klíč neexistuje a není zadána `default_value`, vrátí `None` |
| update() | slovnik1.update(iterable1) | Aktualizuje `slovnik1` pomocí párů klíč-hodnota z `iterable1` |
| popitem() | slovnik1.popitem() | Odstraní a vrátí poslední pár klíč-hodnota z `slovnik1` |
| pop() | slovnik1.pop(key) | - Odstraní a vrátí hodnotu odpovídající klíči `slovnik1[key]` - Vyvolá `KeyError`, pokud klíč neexistuje |
| clear() | slovnik1.clear() | Odstraní všechny položky ze slovníku `slovnik1` |
Závěr
V tomto článku jsme si ukázali, jak používat běžné metody pro čtení, aktualizaci a mazání dat ve slovnících Pythonu. Také jsme si vysvětlili, jak metody `get()` a `setdefault()` pomáhají pracovat s výjimkami `KeyError`. Slovníky můžeme dále třídit dle klíče nebo hodnoty.
Podívejte se také na užitečné metody pro práci se seznamy v Pythonu. Přejeme vám příjemné kódování!