Skip to content

Commit 506e0ee

Browse files
committed
Rewrite intro to dicts
1 parent 95514d0 commit 506e0ee

File tree

2 files changed

+102
-54
lines changed

2 files changed

+102
-54
lines changed

courses/snake/info.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ plan:
4545
title: Příkazová řádka (*)
4646
- title: Instalalce Pygletu
4747
url: null
48-
- title: Základy Pythonu (podle Django Girls)
48+
- title: Základy Pythonu
4949
lesson: fast-track/python-basics
5050
- title: "Doplnění: list slicing, del, n-tice, zip()"
5151
url: null

lessons/fast-track/python-basics/index.md

Lines changed: 101 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -651,97 +651,145 @@ Zkus si nejdřív vypsat, které to jsou, a pak teprve použít `del`.
651651

652652
## Slovníky
653653

654-
Slovník je podobný seznamu, ale pro přístup k hodnotám se používá klíč místo indexu. Klíč může být jakýkoli řetězec nebo číslo. Syntaxe pro definování prázdného slovníku je:
654+
Jiný typ hodnot, které v sobě mohou obsahovat další hodnoty, je *slovník*.
655+
Pro příklad si představ překladový slovník, třeba česko-anglický:
655656

656-
```
657-
>>> {}
658-
{}
659-
```
657+
* **Jablko**: Apple
658+
* **Knoflík**: Button
659+
* **Myš**: Mouse
660660

661-
Vidíš, že jsi právě vytvořila prázdný slovník. Hurá!
661+
Slovník v Pythonu obsahuje záznamy, a každý záznam přiřazuje
662+
nějakému *klíči* nějakou *hodnotu*.
663+
V našem příkladu je klíči *Jablko* přiřazena hodnota *Apple*,
664+
klíči *Knoflík* náleží hodnota *Button*
665+
a klič *Myš* ukazuje na *Mouse*.
662666

663-
A teď zkus napsat následující příkaz (zkus nahradit vlastními informacemi):
667+
V Pythonu by se takový slovník napsal následovně:
664668

665-
```
666-
>>> participant = {'name': 'Ola', 'country': 'Poland', 'favorite_numbers': [7, 42, 92]}
669+
``` pycon
670+
>>> slovnik = {'Jablko': 'Apple', 'Knoflík': 'Button', 'Myš': 'Mouse'}
667671
```
668672

669-
Tímto příkazem jsi právě vytvořila proměnnou s názvem `participant` s třemi dvojicemi klíčů hodnot:
673+
Naše klíče a hodnoty jsou slova – krátké texty, tedy řetězce,
674+
které je potřeba dát do uvozovek.
675+
Klíč a hodnota jsou oddělené dvojtečkou,
676+
jednotlivé dvojice se od sebe oddělují čárkou,
677+
a celý slovník je uzavřený ve složených závorkách.
670678

671-
* Klíč `name` odkazuje na hodnotu `"Ola"` (`string/řetězcový` objekt),
672-
* klíč`country`, ukazuje na `"Polsko"` (další `řetězec`)),
673-
* a `favorite_numbers` ukazuje `[7, 42, 92]` (`list/seznam` obsahující 3 čísla).
679+
Když budeš chtít v takovém slovníku něco najít, potřebuješ vědět, co hledat.
680+
Konkrétně *klíč*.
681+
Pomocí hranatých závorek můžeš zjistit hodnotu, která odpovídá danému klíči:
674682

675-
Můžeš zkontrolovat obsah jednotlivých klíčů následující syntaxí:
676683

684+
``` pycon
685+
>>> slovnik['Jablko']
686+
'Apple'
677687
```
678-
>>> print(participant['name'])
679-
Ola
680-
```
681688

682-
Je to podobné seznamu. Ale není nutné si pamatovat index - jen jméno.
689+
Je to podobné jako u seznamů, jen v hranatých závorkách není pořadí prvku,
690+
ale klíč.
691+
{# XXX: Slicing taky nejde #}
692+
693+
> [note]
694+
> Naopak to nejde – slovník neumožňuje podle hodnoty přímo zjistit klíč.
695+
> Na překlad z angličtiny do češtiny bys potřeboval{{a}} druhý slovník.
683696
684-
Co se stane, když se zeptáme Pythonu na hodnotu klíče, který neexistuje? Zkus hádat! Pojďme to vyzkoušet a uvidíš!
697+
### Měnění slovníků
685698

686-
```
687-
>>> participant['age']
699+
Co se stane, když klíč ve slovníku není?
700+
701+
``` pycon
702+
>>> slovnik['Pes']
688703
Traceback (most recent call last):
689-
File "<stdin>", line 1, in <module>
690-
KeyError: 'age'
704+
File "<stdin>", line 1, in <module>
705+
KeyError: 'Pes'
691706
```
692707

693-
Podívej, další chyba! Toto je **KeyError**. Python ti napomáhá a řekne ti, že klíč `"věk"` v tomto slovníku neexistuje.
708+
Python si postěžuje na `KeyError` – chybu klíče.
694709

695-
Kdy použít slovník a kdy seznam? To je dobrý postřeh k zamyšlení. Kdy použít jakou variantu pochopíš, až si přečteš následující řádky.
710+
Podobně jako seznamy se ale slovníky dají měnit.
711+
Nový záznam vytvoříš takhle:
696712

697-
* Potřebuješ jen seřazenou sekvenci položek? Použij seznam.
698-
* Pokud potřebuješ přiřadit hodnotám klíče, abys je mohla později efektivně vyhledávat (klíčem)? Používej slovník.
713+
``` pycon
714+
>>> slovnik['Pes'] = 'Dog'
715+
>>> slovnik
716+
{'Jablko': 'Apple', 'Knoflík': 'Button', 'Myš': 'Mouse', 'Pes': 'Dog'}
717+
```
718+
719+
> [note]
720+
> Na rozdíl od překladového slovníku nemusí být Pythonní slovník seřazený
721+
> podle abecedy.
722+
> Není to potřeba, počítač umí rychle vyhledávat i bez seřazení.
699723
700-
Slovníky stejně jako seznamy jsou *mutable/proměnlivé*, což znamená, že je lze změnit po jejich vytvoření. Do slovníku můžeš přidat nové páry klíč/hodnota po jeho vytvoření:
724+
Kdybys potřebovala{{a}} změnit už existující záznam, použij stejný příkaz.
725+
K jednomu klíči může patřit jen jedna hodnota.
701726

727+
``` pycon
728+
>>> slovnik['Pes'] = 'Extension cord'
729+
>>> slovnik
730+
{'Jablko': 'Apple', 'Knoflík': 'Button', 'Myš': 'Mouse', 'Pes': 'Extension cord'}
702731
```
703-
>>> participant['favorite_language'] = 'Python'
704-
```
705732

706-
Stejně jako u seznamů můžeš použít metodu `len()` na slovníky, vrací počet párů klíč/hodnota ve slovníku. Nestyď se a zadej příkaz:
733+
{# XXX: Zmínit se o nehomogenních slovnících? #}
734+
735+
Chceš-li ze zlovníku nějaký záznam smazat, dělá se to podobně jako
736+
u seznamů příkazem `del`:
707737

738+
``` pycon
739+
>>> del slovnik['Pes']
740+
>>> slovnik
741+
{'Jablko': 'Apple', 'Knoflík': 'Button', 'Myš': 'Mouse'}
708742
```
709-
>>> len(participant)
710-
4
743+
744+
A když budeš chtít zjistit, kolik je ve slovníku záznamů,
745+
zeptáš se podobně jako na počet znaků řetězce nebo prvků seznamu.
746+
Použiješ funkci `len()`.
747+
748+
``` pycon
749+
>>> len(slovnik)
750+
3
711751
```
712752

713-
Doufám, že ti to nyní dává větší smysl. :) Připravena na více zábavy se slovníky? Pojďme na další řádek a další úžasné věci.
753+
{# XXX
714754

715-
Příkazem `pop()` odstraníš položky ve slovníku. Například pokud chceš odstranit záznam, kterému odpovídá klíč `"favorite_numbers"`, zadej následující příkaz:
755+
### K zamyšlení
716756

717-
```
718-
>>> participant.pop('favorite_numbers')
719-
>>> participant
720-
{'country': 'Poland', 'favorite_language': 'Python', 'name': 'Ola'}
721-
```
757+
Ke každému klíči může patřit jen jedna hodnota.
758+
Jak bys zařídil{{a}}, aby hodnot víc?
722759

723-
Jak vidíš, z výstupu byla odstraněna odpovídající dvojice klíč hodnota 'favorite_numbers'.
760+
Zkus do Pythonní proměnné uložit tyto kontakty:
724761

725-
Kromě toho můžeš také změnit hodnotu přidruženou k již vytvořenému klíči ve slovníku. Napiš:
762+
* Katka:
763+
* 4925219
764+
* Jirka:
765+
* 7477058
766+
* 3251156
767+
* Verča:
768+
* 1019103
726769

770+
{% filter solution %}
771+
Více hodnot se dá uložit do seznamu.
772+
Hodnoty budou seznamy čísel:
773+
774+
```pycon
775+
>>> kontakty = {'Katka': ['4925219'], 'Jirka': ['7477058', '3251156'], 'Verča': ['1019103']}
727776
```
728-
>>> participant['country'] = 'Germany'
729-
>>> participant
730-
{'country': 'Germany', 'favorite_language': 'Python', 'name': 'Ola'}
731-
```
777+
{% endfilter %}
732778

733-
Jak můžeš vidět, hodnota klíče `'country'` se změnila z `"Poland"` na `"Germany"`. :) Úžasné? Hurá! Právě jsi se naučila další úžasnou věc.
779+
Verča se přestěhovala do zahraničí a má nové číslo: `+897 3788509`.
780+
781+
#}
734782

735783
### Shrnutí
736784

737-
Skvělé! Nyní víš o programování hodně. V této poslední části jsi se naučila o:
785+
Skvělé! Nyní víš o programování hodně. V této poslední části jsi poznal{{a}}:
738786

739-
* **errors/chyby** - nyní víš jak číst a pochopit chyby, které ti Python zobrazí, pokud nerozumí příkazu, který jsi zadala
740-
* **proměnné/variables** - názvy pro objekty, které umožňují psát kód snadněji tak, aby byl čitelnější
741-
* **seznamy/lists** - seznamy objektů uložených v určitém pořadí
742-
* **slovníky/dictionaries** - objekty, které jsou uloženy jako dvojice klíč–hodnota
787+
* **chyby** - hlášky které Python zobrazí když nerozumí příkazu který jsi zadal{{a}} nebo ho neumí splnit
788+
* **proměnné** - názvy pro objekty, které umožňují psát čitelnější kód
789+
* **seznam** - sekvence objektů uložených v určitém pořadí
790+
* **slovník** - sbírka záznamů klíč–hodnota
743791

744-
Jsi připravena na další část?
792+
Jsi připraven{{a}} na další část?
745793

746794
## Porovnávání věcí
747795

0 commit comments

Comments
 (0)