Kódím.cz
4

Další datové struktury

N-tice, množiny a slovníky jsou nový typ kolekcí, které umožňují ukládat více dat.

Čtení na doma: Další příklad použití slovníků a cyklu

Máme tabulku s prodejem učebnic chemie v několika městech České republiky.

Město Prodané kusy v roce 2021 Prodané kusy v roce 2022
Praha 4200 4900
Brno 2500 2100
Ostrava 1500 1100
Plzeň 1000 700
Liberec 700 500
Olomouc 400 300

Data máme zadaná v Pythonu jako dvourozměrný seznam. Naším úkolem je zjistit, ve kterých městech prodeje učebnice poklesly.

Řešení úlohy v SQL

Poznámka: Pokud jazyk SQL neznáš, můžeš tuto část přeskočit.

Uvažujme, jak bychom řešili příklad v SQL. Tento příklad je založený na tom, že říkáme, jaký by měl být výsledek. Jinak řečeno, říkáme, co chceme. Neříkáme, jakým způsobem by měl počítač k požadovanému výsledku dojít.

SELECT mesto
FROM prodej_knih
WHERE rok2 < rok1;

Řešení úlohy v Pythonu

V Pythonu s využitím cyklu říkáme, co má počítač udělat, tj. dáváme mu posloupnost kroků, kterou má provést, aby dospěl k námi požadovanému výsledku. Instrukce, které počítači dáme, jsou následující:

  1. Projdi jednotlivé prvky seznamu (projdi tabulku řádek po řádku).
  2. Pro každý prvek (slovník) se podívej, jestli je hodnota s klíčem "prodej_2021" větší než hodnosta s klíček "prodej_2022".
  3. Pokud ano, vypiš hodnotu s klíčem "mesto".
prodej_knih = [
    {"mesto": "Praha", "prodej_2021": 4200, "prodej_2022": 4900},
    {"mesto": "Brno", "prodej_2021": 2500, "prodej_2022": 2100},
    {"mesto": "Ostrava", "prodej_2021": 1500, "prodej_2022": 1100},
    {"mesto": "Plzeň", "prodej_2021": 1000, "prodej_2022": 700},
    {"mesto": "Liberec", "prodej_2021": 700, "prodej_2022": 500},
    {"mesto": "Olomouc", "prodej_2021": 400, "prodej_2022": 300}
]

for radek in prodej_knih:
    if radek["prodej_2021"] > radek["prodej_2022"]:
        print(radek["mesto"])

Níže je výstup, který kód vypíše na obrazovku.

Brno
Ostrava
Plzeň
Liberec
Olomouc

První opakování cyklu

Python do proměnné radek vloží to, co je na začátku seznamu, tj. prodeje v Praze. To, že jde o proměnnou radek, určíme tím, že název radek vložíme mezi for a in.

for radek in prodej_knih:

Nyní je vyhodnocená podmínka

    if radek["prodej_2021"] > radek["prodej_2022"]:

Hodnota radek["prodej_2021"] je 4200 a hodnota radek["prodej_2022"] je 4900. Není tedy pravda, že je hodnota radek["prodej_2021"] větší než hodnota na pozici radek["prodej_2022"], proto nespouštíme kód uvnitř podmínky. V cyklu již další příkazy nejsou a pokračuje dál.

Druhé opakování cyklu

Python do proměnné radek vloží další hodnotu ze seznamu, tj. prodeje v Brně. To, že jde o proměnnou radek, určíme tím, že název radek vložíme mezi for a in.

for radek in prodej_knih:

Nyní je vyhodnocená podmínka

    if radek["prodej_2021"] > radek["prodej_2022"]:

Hodnota radek["prodej_2021"] je 2500 a hodnota radek["prodej_2022"] je 2100. Je pravda, že je hodnota radek["prodej_2021"] větší než hodnota na pozici radek["prodej_2022"], proto spouštíme kód uvnitř podmínky. Program vypíše na obrazovku Brno.

Třetí opakování cyklu

Python do proměnné radek vloží další hodnotu ze seznamu, tj. prodeje v Ostravě. To, že jde o proměnnou radek, určíme tím, že název radek vložíme mezi for a in.

for radek in prodej_knih:

Nyní je vyhodnocená podmínka

    if radek["prodej_2021"] > radek["prodej_2022"]:

Hodnota radek["prodej_2021"] je 1500 a hodnota radek["prodej_2022"] je 1100. Je pravda, že je hodnota radek["prodej_2021"] větší než hodnota na pozici radek["prodej_2022"], proto spouštíme kód uvnitř podmínky. Program vypíše na obrazovku Ostrava.

Průchod slovníku

Pokud procházíme slovník, využijeme metodu .items(), abychom získali klíč a hodnotu. Připravíme si dvě proměnné. Můžeme je pojmenovat jakkoli. Do prvním proměnné bude Python ukládat klíč aktuální položky a do druhé proměnné hodnotu aktuální položky.

slovnik = {
    "jablko": "apple",
    "pes": "dog",
    "kočka": "cat"
}

for key, value in slovnik.items():
    print(f"Slovo {key} přeložíme jako {value}.")
Slovo jablko přeložíme jako apple.
Slovo pes přeložíme jako dog.
Slovo kočka přeložíme jako cat.

První průchod

Do proměnné "key" uloží Python jablko a do proměnné value uloží Python "apple".

Druhý průchod

Do proměnné "key" uloží Python pes a do proměnné value uloží Python "dog".

První průchod

Do proměnné "key" uloží Python kočka a do proměnné value uloží Python "cat".