Listen von Dictionaries
Ein Dictionary beschreibt eine Sache. Wenn du viele gleichartige Sachen hast, packe ihre Dictionaries in eine Liste. Listen von Dictionaries gibt es in der Programmierung überall: Produkte in einem Online-Shop, Nachrichten in einem Chat, Schüler in einer Klasse.
filme = [
{"titel": "Oben", "jahr": 2009, "minuten": 96},
{"titel": "Coco", "jahr": 2017, "minuten": 105},
{"titel": "Shrek", "jahr": 2001, "minuten": 90}
]
print(filme[1])
print(filme[1]["titel"]){'titel': 'Coco', 'jahr': 2017, 'minuten': 105}
CocoJedes Element der Liste ist ein Dictionary, und die Dictionaries sind wie alle anderen Elemente durch Kommas getrennt. Um an einen Wert zu kommen, wählst du zuerst das Element über seinen Index und dann den Wert über seinen Schlüssel. Lies filme[1]["titel"] von links nach rechts: Nimm aus filme das Element mit Index 1 (das Dictionary von Coco) und daraus den Wert von "titel".
Alles, was du über Listen weißt, gilt weiterhin: len(filme) ist die Anzahl der Filme, .append() fügt am Ende einen neuen hinzu, und du kannst einen Wert in einem von ihnen ändern, zum Beispiel filme[0]["minuten"] = 95.
Meistens gehst du eine solche Liste mit einer for-Schleife durch. In jedem Durchlauf enthält die Schleifenvariable ein ganzes Dictionary:
for film in filme:
print(f"{film['titel']} ({film['jahr']})")Oben (2009)
Coco (2017)
Shrek (2001)Es ist eine gute Gewohnheit, die Liste im Plural und die Schleifenvariable im Singular zu benennen (filme, film). Der Code liest sich dann fast wie ein Satz: für jeden Film in den Filmen.
Die Muster aus der Lektion über Schleifen funktionieren auch hier, zum Beispiel Addieren oder Auswählen mit if:
summe = 0
for film in filme:
summe += film["minuten"]
if film["jahr"] > 2005:
print("Neu:", film["titel"])
print("Minuten insgesamt:", summe)Neu: Oben
Neu: Coco
Minuten insgesamt: 291Typische Fehler:
filme["titel"]: Die Liste selbst hat keinen Titel, nur die Filme darin. Eine Liste will einen Index in eckigen Klammern, also endet das Programm mitTypeError: list indices must be integers or slices, not str. Wähle zuerst einen Film aus:filme[0]["titel"].summe += filmstattsumme += film["minuten"]versucht, das ganze Dictionary zu einer Zahl zu addieren:TypeError: unsupported operand type(s) for +=: 'int' and 'dict'.
So schreibst du es:
Anweisungen
- 1
Gib aus, ob die dritte Aufgabe, „Python lernen“, erledigt ist: Gib den Wert ihres Schlüssels
"erledigt"aus. Die Ausgabe sollFalsesein. - 2
Schreibe darunter eine
for-Schleife, die den Namen jeder Aufgabe in einer eigenen Zeile ausgibt. - 3
Gib zum Schluss
Noch zu tun:und darunter die Namen der Aufgaben aus, die noch nicht erledigt sind. Tipp: Der Wert von"erledigt"ist schonTrueoderFalse, also kannst du ihn direkt in der Bedingung verwenden:if not aufgabe["erledigt"]:.