Slovníky a cykly
Na kurzu Úvod do programování v Pythonu jsme si ukázali, že pro práci se sekvencemi jsou ideální cykly. Vyzkoušíme si nyní, jak se slovníky pracovat pomocí cyklů.
Abychom si ukázali průchod slovníkem pomocí cyklu, použijeme slovník s údaji o prodejích knih z cvičení z minulé kapitoly. Ve slovníku tedy máme následující data:
sales = {
    "Zkus mě chytit": 4165,
    "Vrah zavolá v deset": 5681,
    "Zločinný steh": 2565,
}
Data si můžeme představit jako tabulku, kde klíče tvoří názvy knih a hodnota čísla s počtem prodaných kusů.
| key | value | 
|---|---|
| Zkus mě chytit | 4165 | 
| Vrah zavolá v deset | 5681 | 
| Zločinný steh | 2565 | 
Zkusme si nejprve vypsat názvy všech knih ve slovníku (bez počtu prodaných kusů). K tomu použijeme cyklus for, který již známe. Pomocnou proměnnou si pojmenujeme klic. Tato proměnná funguje podobně jako u seznamu - postupně se do ní vloží hodnoty jednotlivých klíčů slovníku.
for key in sales:
    print(key)
Zkusme nyní informaci o každém prodeji vypsat pomocí věty, do které vložíme název knihy a počet prodaných kusů. Oproti předchozímu příkladu je tu změna. Každá položka slovníku se skládá z klíče a hodnoty. V cyklu můžeme použít oboje (a často i používáme). Využijeme tedy dvě proměnné, které oddělíme čárkou. Do první proměnné je uložen klíč a do druhé hodnota.
Všimni si též, že za slovník vkládáme .items(). To je důležité, protože bez metody .items() bychom získali pouze klíče.
for key, value in sales.items():
    print(f"Knihy {key} bylo prodáno {value} výtisků.")
Zkusme si nyní spočítat celkový počet prodaných kusů. Vytvoříme si tedy proměnnou total_sales a pro každou knihu do ní přičteme počet prodaných kusů.
total_sales = 0
for key, value in sales.items():
    print(f"Knihy {key} bylo prodáno {value} výtisků.")
    total_sales = total_sales + value
print(f"Celkem bylo prodáno {total_sales} výtisků.")
Vedle metody .items() existuje i metoda .values(), která vrátí hodnoty ze slovníku jako seznam. Tím si můžeme výpočet součtu zjednodušit.
sales_values = sales.values()
total_sales = sum(sales_values)
print(total_sales)