Seznamy slovníků

Jeden slovník popisuje jednu věc. Když máte mnoho věcí stejného druhu, dejte jejich slovníky do seznamu. Seznamy slovníků jsou v programování všude: zboží v e-shopu, zprávy v chatu, žáci ve třídě.

filmy = [
    {"nazev": "Vzhůru do oblak", "rok": 2009, "minuty": 96},
    {"nazev": "Coco", "rok": 2017, "minuty": 105},
    {"nazev": "Shrek", "rok": 2001, "minuty": 90}
]

print(filmy[1])
print(filmy[1]["nazev"])
{'nazev': 'Coco', 'rok': 2017, 'minuty': 105}
Coco

Každý prvek seznamu je jeden slovník a slovníky se oddělují čárkami jako jakékoli jiné prvky. Když se chcete dostat k jedné hodnotě, vyberte nejdřív prvek podle indexu a pak hodnotu podle klíče. filmy[1]["nazev"] čtěte zleva doprava: ze seznamu filmy vezměte prvek na indexu 1 (slovník filmu Coco) a z něj hodnotu klíče "nazev".

Všechno, co znáte ze seznamů, pořád platí: len(filmy) je počet filmů, .append() přidá nový film na konec a hodnotu v jednom z filmů můžete změnit, třeba filmy[0]["minuty"] = 95.

Nejčastěji takový seznam procházíte cyklem for. Při každém průchodu je v proměnné cyklu jeden celý slovník:

for film in filmy:
    print(f"{film['nazev']} ({film['rok']})")
Vzhůru do oblak (2009)
Coco (2017)
Shrek (2001)

Je dobrým zvykem pojmenovat seznam v množném čísle a proměnnou cyklu v jednotném (filmy, film). Kód se pak čte skoro jako věta: pro každý film ze seznamu filmů.

Vzory z lekce o cyklech fungují i tady, třeba sčítání nebo výběr pomocí if:

celkem = 0
for film in filmy:
    celkem += film["minuty"]
    if film["rok"] > 2005:
        print("Novější:", film["nazev"])
print("Celkem minut:", celkem)
Novější: Vzhůru do oblak
Novější: Coco
Celkem minut: 291

Typické chyby:

  • filmy["nazev"]: seznam sám žádný název nemá, mají ho jen filmy v něm. Seznam chce v hranatých závorkách index, a tak program skončí chybou TypeError: list indices must be integers or slices, not str (indexy seznamu musí být celá čísla, ne text). Nejdřív vyberte film: filmy[0]["nazev"].
  • celkem += film místo celkem += film["minuty"] se snaží přičíst k číslu celý slovník: TypeError: unsupported operand type(s) for +=: 'int' and 'dict'.

Pokyny

Vypište, jestli je hotový třetí úkol, „Naučit se Python“: vypište hodnotu jeho klíče "hotovo". Ve výpisu by mělo být False.

Pod to napište cyklus for, který vypíše název každého úkolu, každý na samostatný řádek.

Nakonec vypište Zbývá: a pod to názvy úkolů, které ještě nejsou hotové. Tip: hodnota "hotovo" už je True nebo False, takže ji můžete rovnou použít jako podmínku: if not ukol["hotovo"]:.

Začněte programovat zdarma

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

7/9