dictionary
)¶Slovník je typ pro ukládání dvojic klíč : hodnota
. Můžete si ho představit jako seznam, ale indexovaný čímkoliv.
Prvky slovníku se zapisují do složených závorek { }
, mezi klíčem a hodnotou je dvojtečka, dvojice klíč : hodnota
jsou odděleny čárkami.
zvire1 = {"jmeno": "Čára", "druh": "pes", "vek": 5}
Uvnitř definice slovníku (uvnitř složených závorek) můžeme libovolně používat odsazení a nové řádky:
zvire1 = {
"jmeno": "Čára",
"druh": "pes",
"vek": 5
}
Hodnoty slovníku mohlou být jakéhokoliv datového typu:
zvire2 = {
"jmeno": "Simba",
"druh": "pes",
"vaha": 35,
"datum narozeni": (31, 1, 2015)
}
Klíč slovníku může být jakýkoliv immutable
typ - celé číslo, znakový řetězec nebo n-tice. V jednom slovníku mohou být klíče různých typů.
kalendar = {
(15, 12, 2021): "vyzvednout dárek pro mámu",
(23, 12, 2021): "ozdobit stromek",
(24, 12, 2021): "zabalit dárky",
"až bude čas": "srovnat sbírku CDček"
}
Jak by vypadal kalendář, do kterého bychom mohli ukládát více úkolů k jednomu datu?
K jednotlivým hodnotám ve slovníku, je možné přistupovat pomocí jejich klíče zapsaného v hranatých závorkách.
---------------------------
klíč: | "jméno" | "druh" | "vek" |
---------------------------
hodnota: | Čára" | "pes" | 5 |
---------------------------
zvire1["druh"]
'pes'
# rok, kdy se narodilo zvire2
zvire2["datum narozeni"][2]
2015
Pokud zkoušíme přistoupit k prvku, který v seznamu není, dojde k chybě KeyError
:
zvire1["vaha"]
--------------------------------------------------------------------------- KeyError Traceback (most recent call last) ~\AppData\Local\Temp/ipykernel_21436/519663323.py in <module> ----> 1 zvire1["vaha"] KeyError: 'vaha'
zvire1["vek"] = 6
zvire1
{'jmeno': 'Čára', 'druh': 'pes', 'vek': 6}
zvire1["plemeno"] = "kokršpaněl"
zvire1
{'jmeno': 'Čára', 'druh': 'pes', 'vek': 6, 'plemeno': 'kokršpaněl'}
del zvire1["plemeno"]
zvire1
{'jmeno': 'Čára', 'druh': 'pes', 'vek': 6}
in
¶Operátor in
zjistí, jestli je klíč ve slovníku. Pokud ano, je výsledek True
, pokud ne, výsledek je False
.
zvire1 = {'jmeno': 'Čára', 'druh': 'pes', 'vek': 6}
if "jmeno" in zvire1:
print("zvíře1 má jméno")
zvíře1 má jméno
For cyklus prochází klíče slovníku:
for klic in slovnik:
print(klic)
Vypsání klíčů slovníku zvire1
:
for k in zvire1:
print(k)
jmeno druh vek
Vypsání klíče i hodnoty:
for klic in slovnik:
print( klic, slovnik[klic] )
for k in zvire1:
print(k, zvire1[k])
jmeno Čára druh pes vek 5
Vytvořte si (ručně) slovník, který bude obsahovat 5 klíčů - slov v cizím jazyce, a jako hodnoty jejich překlad do češtiny. Pomocí tohoto slovníku překládejte vstup od uživatele.
Ošetřete případ, kdy zadané slovo ve slovníku není
Následujícím způsobem můžeme reprezentovat dvourozměrný svět, třeba pro robůtka nebo packmana. Použijeme tzv. řídkou matici, tedy ve slovníku budeme zaznamenávat jenom ta políčka, na kterých je něco důležitého.
Hvězdičkou si označíme potravu, znakem o
díru.
svet = {
(3,5): "*",
(7,8): "o",
(2,2): "*",
(4,7): "*",
(5,8): "o",
}
K tomu musíme doplnit ještě rozměry světa...
velikost_x = 10
velikost_y = 10
...a už si můžeme svět vypsat:
for y in range(velikost_y):
for x in range(velikost_x):
if (x, y) in svet:
print(svet[(x,y)], end=" ")
else:
print(".", end=" ")
print()
. . . . . . . . . . . . . . . . . . . . . . * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . * . . . . . . . . . . . . . . . . . . . . * . . . . . . . . . . o . o . . . . . . . . . . . .