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í!