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.

Dvourozměrné tabulky v Pythonu

O knihách můžeme evidovat mnohem více informací. Uvažujme nyní, že chceme mít uložen nejen počet prodaných kusů, ale i cenu knihy. Použijeme opět slovník, pro jednu knihu by zápis vypadal takto:

book = {"title": "Zkus mě chytit", "sold": 4165, "price": 347, "year": 2018}

My ale máme další dvě knihy. Jak vložíme všechny knihy do jedné proměnné? Použijeme k tomu seznamy, které již známe! Seznam se všemi slovníky může vypadat takto:

books = [
    {"title": "Zkus mě chytit", "sold": 4165, "price": 347, "year": 2018},
    {"title": "Vrah zavolá v deset", "sold": 5681, "price": 299, "year": 2019},
    {"title": "Zločinný steh", "sold": 2565, "price": 369, "year": 2019},
]

Je to v podstatě běžná dvourozměrná tabulka, stejná data vidíme jako tabulku níže.

title sold price year
Zkus mě chytit 4165 347 2018
Vrah zavolá v deset 5681 299 2019
Zločinný steh 2565 369 2019

Upravme nyní náš výpočet celkového počtu prodaných knih. Nyní pomocí cyklu for procházíme seznam, vrátíme se tedy zpět k jedné proměnné, kterou si pojmenujeme polozka. Do té cyklus nyní nebude ukládat číslo, ale slovník. Protože my chceme vědět počet prodaných kusů, z každého slovníku si načteme hodnotu uloženou pod klíčem sold.

total_sales = 0
for item in books:
    total_sales += item["sold"]
print(f"Celkem bylo prodáno {total_sales} knih.")

Zkusme si ještě spočítat tržby nejen v prodaných kusech, ale i v penězích. Vždy tedy počet prodaných knih (hodnota s klíčem sold) vynásobíme cenou jedné knihy (hodnota s klíčem price).

total_sales = 0
for item in books:
    total_sales = total_sales + item["sold"] * item["price"]
print(f"Celkové tržby jsou {total_sales} Kč.")

Zkusme ještě jednu úpravu. Nakladatele zajímá, jaké jsou peněžní tržby za knihy vydané v roce 2019. U každé knihy tedy musíme zkontrolovat, zda vyšla v roce 2019, a pouze pokud je tato podmínka splněná, přičteme tržbu za knihu k proměnné total_sales.

total_sales = 0
for item in books:
    if item["year"] == 2019:
        total_sales = total_sales + item["sold"] * item["price"]
print(f"Celkové tržby za knihy prodané v roce 2019 jsou {total_sales} Kč.")