Slovníky

Další základní datový typ, který si představíme – po číslech, řetězcích, seznamech a n-ticích – jsou slovníky (angl. dictionary, dict).

Podobně jako seznamy, slovníky v sobě obsahují další hodnoty. Na rozdíl od seznamů, ve kterých jsou všechny prvky uspořádané do jedné sekvence, ve slovnících máme dva druhy prvků: takzvaný klíč (angl. key) a hodnotu (angl. value). Každému klíči je přiřazena jedna hodnota.

Slovník můžeš použít, když máš několik kousků informací, které se dají pojmenovat, ale chceš s nimi pracovat jako s jednou proměnnou.

Tady je slovník, který má tři klíče, a k nim příslušné tři hodnoty:

>>> ja = {'jméno': 'Anna', 'město': 'Brno', 'čísla': [3, 7]}

Hodnoty ze slovníku můžeš získat podobně jako ze seznamu, jen místo indexu (pozice) použiješ klíč:

>>> ja['jméno']
'Anna'

Zeptáš-li se na neexistující klíč, nebude se to Pythonu líbit:

>>> ja['věk']
Traceback (most recent call last):
  File "<stdin>", line 1, in &lt;module&gt;
KeyError: 'věk'

Hodnoty jdou podle klíče i měnit:

>>> ja['čísla'] = [3, 7, 42]
>>> ja
{'jméno': 'Anna', 'město': 'Brno', 'čísla': [3, 7, 42]}

... nebo přidávat:

>>> ja['jazyk'] = 'Python'
>>> ja
{'jméno': 'Anna', 'město': 'Brno', 'čísla': [3, 7, 42], 'jazyk': 'Python'}

... nebo ubírat příkazem del, podobně jako u seznamů:

>>> del ja['čísla']
>>> ja
{'jméno': 'Anna', 'město': 'Brno', 'jazyk': 'Python'}

Vyhledávací tabulka

Trochu jiné použití slovníku, než sdružování „různých“ typů informací, je takzvaná vyhledávací tabulka (angl. lookup table). V ní mají typicky všechny hodnoty stejný typ.

Taková tabulka se hodí vždycky, když je potřeba přiřadit nějaké hodnoty jiným hodnotám. Jako v telefonním seznamu, kde každému jménu přísluší nějaké číslo, nebo v překladovém slovníku, kde jsou slovům přiřazeny překlady.

cisla = {
    'Maruška': '153 85283',
    'Terka': '237 26505',
    'Renata': '385 11223',
    'Michal': '491 88047',
}

barvy = {
    'hruška': 'zelená',
    'jablko': 'červená',
    'meloun': 'zelená',
    'švestka': 'modrá',
    'ředkvička': 'červená',
    'zelí': 'zelená',
    'mrkev': 'červená',
}

Iterace

Když dáš slovník do cyklu for, dostaneš klíče:

>>> popisy_funkci = {'len': 'délka', 'str': 'řetězec', 'dict': 'slovník'}
>>> for klic in popisy_funkci:
...     print(klic)
str
dict
len

Pokud chceš hodnoty, stačí použít metodu values:

>>> for hodnota in popisy_funkci.values():
...     print(hodnota)
řetězec
slovník
délka

Většinou ale potřebuješ jak klíče tak hodnoty. K tomu mají slovníky metodu items, která bude v cyklu for dávat dvojice:

>>> for klic, hodnota in popisy_funkci.items():
...     print('{}: {}'.format(klic, hodnota))
str: řetězec
dict: slovník
len: délka

Existuje i metoda keys(), která vrací klíče.

To, co keys(), values() a items() vrací, jsou speciální objekty, které kromě použití ve for umožňují další operace: například pracovat s klíči jako s množinou. V dokumentaci Pythonu je to všechno popsáno.

V průběhu takového for cyklu nesmíš do slovníku přidávat záznamy, ani záznamy odebírat:

>>> for klic in popisy_funkci:
...     del popisy_funkci[klic]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
RuntimeError: dictionary changed size during iteration

Hodnoty u už existujících klíčů ale měnit můžeš.

Jak udělat slovník

Slovník se dá vytvořit dvěma způsoby. První, pomocí {složených závorek}, jsme už viděly; další využívají funkci dict. Ta, ve stylu str, int či list, převede cokoli, co jde, na slovník.

Slovník je ovšem dost specifická struktura – čísla nebo typické seznamy na něj převádět nejdou. Můžeme ale na slovník převést jiný slovník. Nový slovník žije svým vlastním životem; následné změny se promítnou jen do něj.

barvy_po_tydnu = dict(barvy)
for klic in barvy_po_tydnu:
    barvy_po_tydnu[klic] = 'černo-hnědo-' + barvy_po_tydnu[klic]
print(barvy['jablko'])
print(barvy_po_tydnu['jablko'])

Druhá věc, která jde převést na slovník, je sekvence dvojic klíč/hodnota:

data = [(1, 'jedna'), (2, 'dva'), (3, 'tři')]
nazvy_cisel = dict(data)

A to je vše, co se na slovník dá převést.

Jako bonus umí funkce dict ještě brát pojmenované argumenty. Každé jméno argumentu převede na řetězec, použije ho jako klíč, a přiřadí danou hodnotu:

popisy_funkci = dict(len='délka', str='řetězec', dict='slovník')
print(popisy_funkci['len'])

Pozor na to, že v tomhle případě musí být klíče pythonní „jména“ – musí být použitelné jako jména proměnných. Například takhle nejde zadat jako klíč řetězec "def" nebo "propan-butan".

Pojmenované argumenty jde kombinovat s ostatními způsoby vytvoření dict.

A to je zatím ke slovníkům vše

Chceš-li mít všechny triky, které slovníky umí, pěkně pohromadě, můžeš si stáhnout Slovníkový tahák.

Kompletní popis slovníků najdeš v dokumentaci Pythonu.

{
  "data": {
    "sessionMaterial": {
      "id": "session-material:2019/plzen-jaro-2019:dict:0",
      "title": "SlovnĂ­ky",
      "html": "\n          \n    \n\n    <h1>Slovn&#xED;ky</h1>\n<p>Dal&#x161;&#xED; z&#xE1;kladn&#xED; datov&#xFD; typ, kter&#xFD; si p&#x159;edstav&#xED;me &#x2013;\npo &#x10D;&#xED;slech, &#x159;et&#x11B;zc&#xED;ch, seznamech a <var>n</var>-tic&#xED;ch &#x2013;\njsou <em>slovn&#xED;ky</em> (angl. <em>dictionary</em>, <code>dict</code>).</p>\n<p>Podobn&#x11B; jako seznamy, slovn&#xED;ky v sob&#x11B; obsahuj&#xED; dal&#x161;&#xED; hodnoty.\nNa rozd&#xED;l od seznam&#x16F;, ve kter&#xFD;ch jsou v&#x161;echny prvky\nuspo&#x159;&#xE1;dan&#xE9; do jedn&#xE9; sekvence, ve slovn&#xED;c&#xED;ch m&#xE1;me dva druhy\nprvk&#x16F;: takzvan&#xFD; <em>kl&#xED;&#x10D;</em> (angl. <em>key</em>) a <em>hodnotu</em> (angl. <em>value</em>).\nKa&#x17E;d&#xE9;mu kl&#xED;&#x10D;i je p&#x159;i&#x159;azena jedna hodnota.</p>\n<p>Slovn&#xED;k m&#x16F;&#x17E;e&#x161; pou&#x17E;&#xED;t, kdy&#x17E; m&#xE1;&#x161; n&#x11B;kolik kousk&#x16F;\ninformac&#xED;, kter&#xE9; se daj&#xED; pojmenovat, ale chce&#x161; s&#xA0;nimi\npracovat jako s&#xA0;jednou prom&#x11B;nnou.</p>\n<p>Tady je slovn&#xED;k, kter&#xFD; m&#xE1; t&#x159;i kl&#xED;&#x10D;e, a k nim p&#x159;&#xED;slu&#x161;n&#xE9; t&#x159;i hodnoty:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">ja</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&apos;jm&#xE9;no&apos;</span><span class=\"p\">:</span> <span class=\"s1\">&apos;Anna&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;m&#x11B;sto&apos;</span><span class=\"p\">:</span> <span class=\"s1\">&apos;Brno&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;&#x10D;&#xED;sla&apos;</span><span class=\"p\">:</span> <span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">]}</span>\n</pre></div><p>Hodnoty ze slovn&#xED;ku m&#x16F;&#x17E;e&#x161; z&#xED;skat podobn&#x11B; jako\nze seznamu, jen m&#xED;sto indexu (pozice) pou&#x17E;ije&#x161; kl&#xED;&#x10D;:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">ja</span><span class=\"p\">[</span><span class=\"s1\">&apos;jm&#xE9;no&apos;</span><span class=\"p\">]</span>\n<span class=\"go\">&apos;Anna&apos;</span>\n</pre></div><p>Zept&#xE1;&#x161;-li se na neexistuj&#xED;c&#xED; kl&#xED;&#x10D;, nebude se to Pythonu l&#xED;bit:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">ja</span><span class=\"p\">[</span><span class=\"s1\">&apos;v&#x11B;k&apos;</span><span class=\"p\">]</span>\n<span class=\"gt\">Traceback (most recent call last):</span>\n  File <span class=\"nb\">&quot;&lt;stdin&gt;&quot;</span>, line <span class=\"m\">1</span>, in <span class=\"n\">&amp;lt;module&amp;gt;</span>\n<span class=\"gr\">KeyError</span>: <span class=\"n\">&apos;v&#x11B;k&apos;</span>\n</pre></div><p>Hodnoty jdou podle kl&#xED;&#x10D;e i m&#x11B;nit:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">ja</span><span class=\"p\">[</span><span class=\"s1\">&apos;&#x10D;&#xED;sla&apos;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"mi\">42</span><span class=\"p\">]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">ja</span>\n<span class=\"go\">{&apos;jm&#xE9;no&apos;: &apos;Anna&apos;, &apos;m&#x11B;sto&apos;: &apos;Brno&apos;, &apos;&#x10D;&#xED;sla&apos;: [3, 7, 42]}</span>\n</pre></div><p>... nebo p&#x159;id&#xE1;vat:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">ja</span><span class=\"p\">[</span><span class=\"s1\">&apos;jazyk&apos;</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&apos;Python&apos;</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">ja</span>\n<span class=\"go\">{&apos;jm&#xE9;no&apos;: &apos;Anna&apos;, &apos;m&#x11B;sto&apos;: &apos;Brno&apos;, &apos;&#x10D;&#xED;sla&apos;: [3, 7, 42], &apos;jazyk&apos;: &apos;Python&apos;}</span>\n</pre></div><p>... nebo ub&#xED;rat p&#x159;&#xED;kazem <code>del</code>, podobn&#x11B; jako u seznam&#x16F;:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">del</span> <span class=\"n\">ja</span><span class=\"p\">[</span><span class=\"s1\">&apos;&#x10D;&#xED;sla&apos;</span><span class=\"p\">]</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">ja</span>\n<span class=\"go\">{&apos;jm&#xE9;no&apos;: &apos;Anna&apos;, &apos;m&#x11B;sto&apos;: &apos;Brno&apos;, &apos;jazyk&apos;: &apos;Python&apos;}</span>\n</pre></div><h2>Vyhled&#xE1;vac&#xED; tabulka</h2>\n<p>Trochu jin&#xE9; pou&#x17E;it&#xED; slovn&#xED;ku, ne&#x17E; sdru&#x17E;ov&#xE1;n&#xED;\n&#x201E;r&#x16F;zn&#xFD;ch&#x201C; typ&#x16F; informac&#xED;, je takzvan&#xE1;\n<em>vyhled&#xE1;vac&#xED; tabulka</em> (angl. <em>lookup table</em>).\nV&#xA0;n&#xED; maj&#xED; typicky v&#x161;echny hodnoty stejn&#xFD; typ.</p>\n<p>Takov&#xE1; tabulka se hod&#xED; v&#x17E;dycky, kdy&#x17E; je pot&#x159;eba\np&#x159;i&#x159;adit n&#x11B;jak&#xE9; hodnoty jin&#xFD;m hodnot&#xE1;m.\nJako v telefonn&#xED;m seznamu, kde ka&#x17E;d&#xE9;mu jm&#xE9;nu p&#x159;&#xED;slu&#x161;&#xED;\nn&#x11B;jak&#xE9; &#x10D;&#xED;slo, nebo v&#xA0;p&#x159;ekladov&#xE9;m slovn&#xED;ku, kde jsou slov&#x16F;m\np&#x159;i&#x159;azeny p&#x159;eklady.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">cisla</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s1\">&apos;Maru&#x161;ka&apos;</span><span class=\"p\">:</span> <span class=\"s1\">&apos;153 85283&apos;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&apos;Terka&apos;</span><span class=\"p\">:</span> <span class=\"s1\">&apos;237 26505&apos;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&apos;Renata&apos;</span><span class=\"p\">:</span> <span class=\"s1\">&apos;385 11223&apos;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&apos;Michal&apos;</span><span class=\"p\">:</span> <span class=\"s1\">&apos;491 88047&apos;</span><span class=\"p\">,</span>\n<span class=\"p\">}</span>\n\n<span class=\"n\">barvy</span> <span class=\"o\">=</span> <span class=\"p\">{</span>\n    <span class=\"s1\">&apos;hru&#x161;ka&apos;</span><span class=\"p\">:</span> <span class=\"s1\">&apos;zelen&#xE1;&apos;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&apos;jablko&apos;</span><span class=\"p\">:</span> <span class=\"s1\">&apos;&#x10D;erven&#xE1;&apos;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&apos;meloun&apos;</span><span class=\"p\">:</span> <span class=\"s1\">&apos;zelen&#xE1;&apos;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&apos;&#x161;vestka&apos;</span><span class=\"p\">:</span> <span class=\"s1\">&apos;modr&#xE1;&apos;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&apos;&#x159;edkvi&#x10D;ka&apos;</span><span class=\"p\">:</span> <span class=\"s1\">&apos;&#x10D;erven&#xE1;&apos;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&apos;zel&#xED;&apos;</span><span class=\"p\">:</span> <span class=\"s1\">&apos;zelen&#xE1;&apos;</span><span class=\"p\">,</span>\n    <span class=\"s1\">&apos;mrkev&apos;</span><span class=\"p\">:</span> <span class=\"s1\">&apos;&#x10D;erven&#xE1;&apos;</span><span class=\"p\">,</span>\n<span class=\"p\">}</span>\n</pre></div><h2>Iterace</h2>\n<p>Kdy&#x17E; d&#xE1;&#x161; slovn&#xED;k do cyklu <code>for</code>, dostane&#x161; kl&#xED;&#x10D;e:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"n\">popisy_funkci</span> <span class=\"o\">=</span> <span class=\"p\">{</span><span class=\"s1\">&apos;len&apos;</span><span class=\"p\">:</span> <span class=\"s1\">&apos;d&#xE9;lka&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;str&apos;</span><span class=\"p\">:</span> <span class=\"s1\">&apos;&#x159;et&#x11B;zec&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;dict&apos;</span><span class=\"p\">:</span> <span class=\"s1\">&apos;slovn&#xED;k&apos;</span><span class=\"p\">}</span>\n<span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> <span class=\"n\">klic</span> <span class=\"ow\">in</span> <span class=\"n\">popisy_funkci</span><span class=\"p\">:</span>\n<span class=\"gp\">... </span>    <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">klic</span><span class=\"p\">)</span>\n<span class=\"go\">str</span>\n<span class=\"go\">dict</span>\n<span class=\"go\">len</span>\n</pre></div><p>Pokud chce&#x161; hodnoty, sta&#x10D;&#xED; pou&#x17E;&#xED;t metodu <code>values</code>:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> <span class=\"n\">hodnota</span> <span class=\"ow\">in</span> <span class=\"n\">popisy_funkci</span><span class=\"o\">.</span><span class=\"n\">values</span><span class=\"p\">():</span>\n<span class=\"gp\">... </span>    <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">hodnota</span><span class=\"p\">)</span>\n<span class=\"go\">&#x159;et&#x11B;zec</span>\n<span class=\"go\">slovn&#xED;k</span>\n<span class=\"go\">d&#xE9;lka</span>\n</pre></div><p>V&#x11B;t&#x161;inou ale pot&#x159;ebuje&#x161; jak kl&#xED;&#x10D;e tak hodnoty.\nK&#xA0;tomu maj&#xED; slovn&#xED;ky metodu <code>items</code>,\nkter&#xE1; bude v cyklu <code>for</code> d&#xE1;vat dvojice:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"gp\">&gt;&gt;&gt; </span><span class=\"k\">for</span> <span class=\"n\">klic</span><span class=\"p\">,</span> <span class=\"n\">hodnota</span> <span class=\"ow\">in</span> <span class=\"n\">popisy_funkci</span><span class=\"o\">.</span><span class=\"n\">items</span><span class=\"p\">():</span>\n<span class=\"gp\">... </span>    <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">&apos;{}: {}&apos;</span><span class=\"o\">.</span><span class=\"n\">format</span><span class=\"p\">(</span><span class=\"n\">klic</span><span class=\"p\">,</span> <span class=\"n\">hodnota</span><span class=\"p\">))</span>\n<span class=\"go\">str: &#x159;et&#x11B;zec</span>\n<span class=\"go\">dict: slovn&#xED;k</span>\n<span class=\"go\">len: d&#xE9;lka</span>\n</pre></div><div class=\"admonition note\"><p>Existuje i metoda <code>keys()</code>, kter&#xE1; vrac&#xED; kl&#xED;&#x10D;e.</p>\n<p>To, co <code>keys()</code>, <code>values()</code> a <code>items()</code> vrac&#xED;, jsou speci&#xE1;ln&#xED; objekty,\nkter&#xE9; krom&#x11B; pou&#x17E;it&#xED; ve <code>for</code> umo&#x17E;&#x148;uj&#xED; dal&#x161;&#xED;\noperace: nap&#x159;&#xED;klad pracovat s&#xA0;kl&#xED;&#x10D;i jako s&#xA0;mno&#x17E;inou.\nV&#xA0;<a href=\"https://docs.python.org/3.0/library/stdtypes.html#dictionary-view-objects\">dokumentaci</a>\nPythonu je to v&#x161;echno pops&#xE1;no.</p>\n</div><p>V pr&#x16F;b&#x11B;hu takov&#xE9;ho <code>for</code> cyklu nesm&#xED;&#x161;\ndo slovn&#xED;ku p&#x159;id&#xE1;vat z&#xE1;znamy, ani z&#xE1;znamy odeb&#xED;rat:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"o\">&gt;&gt;&gt;</span> <span class=\"k\">for</span> <span class=\"n\">klic</span> <span class=\"ow\">in</span> <span class=\"n\">popisy_funkci</span><span class=\"p\">:</span>\n<span class=\"o\">...</span>     <span class=\"k\">del</span> <span class=\"n\">popisy_funkci</span><span class=\"p\">[</span><span class=\"n\">klic</span><span class=\"p\">]</span>\n<span class=\"n\">Traceback</span> <span class=\"p\">(</span><span class=\"n\">most</span> <span class=\"n\">recent</span> <span class=\"n\">call</span> <span class=\"n\">last</span><span class=\"p\">):</span>\n  <span class=\"n\">File</span> <span class=\"s2\">&quot;&lt;stdin&gt;&quot;</span><span class=\"p\">,</span> <span class=\"n\">line</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"ow\">in</span> <span class=\"o\">&lt;</span><span class=\"n\">module</span><span class=\"o\">&gt;</span>\n<span class=\"ne\">RuntimeError</span><span class=\"p\">:</span> <span class=\"n\">dictionary</span> <span class=\"n\">changed</span> <span class=\"n\">size</span> <span class=\"n\">during</span> <span class=\"n\">iteration</span>\n</pre></div><p>Hodnoty u u&#x17E; existuj&#xED;c&#xED;ch kl&#xED;&#x10D;&#x16F; ale m&#x11B;nit m&#x16F;&#x17E;e&#x161;.</p>\n<h2>Jak ud&#x11B;lat slovn&#xED;k</h2>\n<p>Slovn&#xED;k se d&#xE1; vytvo&#x159;it dv&#x11B;ma zp&#x16F;soby.\nPrvn&#xED;, pomoc&#xED; {slo&#x17E;en&#xFD;ch z&#xE1;vorek}, jsme u&#x17E; vid&#x11B;ly;\ndal&#x161;&#xED; vyu&#x17E;&#xED;vaj&#xED; funkci <code>dict</code>.\nTa, ve stylu <code>str</code>, <code>int</code> &#x10D;i <code>list</code>, p&#x159;evede cokoli, co jde, na slovn&#xED;k.</p>\n<p>Slovn&#xED;k je ov&#x161;em dost specifick&#xE1; struktura &#x2013;\n&#x10D;&#xED;sla nebo typick&#xE9; seznamy na n&#x11B;j p&#x159;ev&#xE1;d&#x11B;t nejdou.\nM&#x16F;&#x17E;eme ale na slovn&#xED;k p&#x159;ev&#xE9;st <em>jin&#xFD; slovn&#xED;k</em>.\nNov&#xFD; slovn&#xED;k &#x17E;ije sv&#xFD;m vlastn&#xED;m &#x17E;ivotem;\nn&#xE1;sledn&#xE9; zm&#x11B;ny se prom&#xED;tnou jen do n&#x11B;j.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">barvy_po_tydnu</span> <span class=\"o\">=</span> <span class=\"nb\">dict</span><span class=\"p\">(</span><span class=\"n\">barvy</span><span class=\"p\">)</span>\n<span class=\"k\">for</span> <span class=\"n\">klic</span> <span class=\"ow\">in</span> <span class=\"n\">barvy_po_tydnu</span><span class=\"p\">:</span>\n    <span class=\"n\">barvy_po_tydnu</span><span class=\"p\">[</span><span class=\"n\">klic</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"s1\">&apos;&#x10D;erno-hn&#x11B;do-&apos;</span> <span class=\"o\">+</span> <span class=\"n\">barvy_po_tydnu</span><span class=\"p\">[</span><span class=\"n\">klic</span><span class=\"p\">]</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">barvy</span><span class=\"p\">[</span><span class=\"s1\">&apos;jablko&apos;</span><span class=\"p\">])</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">barvy_po_tydnu</span><span class=\"p\">[</span><span class=\"s1\">&apos;jablko&apos;</span><span class=\"p\">])</span>\n</pre></div><p>Druh&#xE1; v&#x11B;c, kter&#xE1; jde p&#x159;ev&#xE9;st na slovn&#xED;k, je\n<em>sekvence dvojic</em> kl&#xED;&#x10D;/hodnota:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">data</span> <span class=\"o\">=</span> <span class=\"p\">[(</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"s1\">&apos;jedna&apos;</span><span class=\"p\">),</span> <span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"s1\">&apos;dva&apos;</span><span class=\"p\">),</span> <span class=\"p\">(</span><span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&apos;t&#x159;i&apos;</span><span class=\"p\">)]</span>\n<span class=\"n\">nazvy_cisel</span> <span class=\"o\">=</span> <span class=\"nb\">dict</span><span class=\"p\">(</span><span class=\"n\">data</span><span class=\"p\">)</span>\n</pre></div><p>A to je v&#x161;e, co se na slovn&#xED;k d&#xE1; p&#x159;ev&#xE9;st.</p>\n<p>Jako bonus um&#xED; funkce <code>dict</code> je&#x161;t&#x11B;\nbr&#xE1;t pojmenovan&#xE9; argumenty.\nKa&#x17E;d&#xE9; jm&#xE9;no argumentu p&#x159;evede na &#x159;et&#x11B;zec,\npou&#x17E;ije ho jako kl&#xED;&#x10D;, a p&#x159;i&#x159;ad&#xED; danou hodnotu:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">popisy_funkci</span> <span class=\"o\">=</span> <span class=\"nb\">dict</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"o\">=</span><span class=\"s1\">&apos;d&#xE9;lka&apos;</span><span class=\"p\">,</span> <span class=\"nb\">str</span><span class=\"o\">=</span><span class=\"s1\">&apos;&#x159;et&#x11B;zec&apos;</span><span class=\"p\">,</span> <span class=\"nb\">dict</span><span class=\"o\">=</span><span class=\"s1\">&apos;slovn&#xED;k&apos;</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">popisy_funkci</span><span class=\"p\">[</span><span class=\"s1\">&apos;len&apos;</span><span class=\"p\">])</span>\n</pre></div><div class=\"admonition note\"><p>Pozor na to, &#x17E;e v tomhle p&#x159;&#xED;pad&#x11B; mus&#xED; b&#xFD;t kl&#xED;&#x10D;e\npythonn&#xED; &#x201E;jm&#xE9;na&#x201C; &#x2013; mus&#xED; b&#xFD;t pou&#x17E;iteln&#xE9; jako jm&#xE9;na prom&#x11B;nn&#xFD;ch.\nNap&#x159;&#xED;klad takhle nejde zadat jako kl&#xED;&#x10D; &#x159;et&#x11B;zec\n<code>&quot;def&quot;</code> nebo <code>&quot;propan-butan&quot;</code>.</p>\n</div><p>Pojmenovan&#xE9; argumenty jde kombinovat s ostatn&#xED;mi\nzp&#x16F;soby vytvo&#x159;en&#xED; <code>dict</code>.</p>\n<h2>A to je zat&#xED;m ke slovn&#xED;k&#x16F;m v&#x161;e</h2>\n<p>Chce&#x161;-li m&#xED;t v&#x161;echny triky, kter&#xE9;  slovn&#xED;ky um&#xED;,\np&#x11B;kn&#x11B; pohromad&#x11B;, m&#x16F;&#x17E;e&#x161; si st&#xE1;hnout\n<a href=\"https://pyvec.github.io/cheatsheets/dicts/dicts-cs.pdf\">Slovn&#xED;kov&#xFD; tah&#xE1;k</a>.</p>\n<p>Kompletn&#xED; popis slovn&#xED;k&#x16F; najde&#x161;\nv&#xA0;<a href=\"https://docs.python.org/3.0/library/stdtypes.html#mapping-types-dict\">dokumentaci</a>\nPythonu.</p>\n\n\n        "
    }
  }
}