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}
CocoKaž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: 291Typické 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čí chybouTypeError: 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 += filmmístocelkem += film["minuty"]se snaží přičíst k číslu celý slovník:TypeError: unsupported operand type(s) for +=: 'int' and 'dict'.
Jak psát:
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
7/9