Arbeiten mit Dictionaries
Einführung
Für die Bearbeitung dieses Kapitel unseres Python-Tutorials nehmen war an, dass man mit den Grundbegriffen der Python-Dictionaries und der while
-Schleife bereits vertraut ist, so wie wir sie in den Kapitelen Dictionaries and Schleifen behandelt hatten.
Wir haben dieses Kapitel aufgenommen, um den Lernenden zusätzliche Übungen mit sowohl Dictionaries als auch While
-Schleifen bereitzustellen.
Der Fokus liegt auf verschachtelten Wörterbüchern, in unseren Beispielen auf Dictionaries mit Unterdictionaries. Aus den Erfahrungen meiner Kurse weiß ich, dass dies oft besondere Schwierigkeiten für Anfängerinnen und Anfänger verursacht.
In diesem Kapitel geht es auch um Kaffee, Tee und andere Heißgetränke, deren Konsum wir mittels Python-Dictionaries verwalten.
Im ersten Beispiel starten wir mit einem Dictionary mit drei Personen als Keys. Die Werte entsprechen der Anzahl von getrunkenen Kaffeetassen:
kaffeeliste = {"Peter": 0,
"Eva": 0,
"Franka": 0}
while True:
name = input("Name: ")
if name == "":
break
if name not in kaffeeliste:
print("Diese Person kenne ich nicht!")
continue
kaffeeliste[name] += 1
print(kaffeeliste[name])
print("kaffeeliste: ", kaffeeliste)
Wir dürfen natürlich nicht die Teetrinker vergessen. Deshalb erweitern wir unser Python-Programm um eine Liste für den Teekonsum:
kaffeeliste = {"Peter": 0,
"Eva": 0,
"Franka": 0}
teeliste = {"Peter": 0,
"Eva": 0,
"Franka": 0}
while True:
name = input("Name: ")
if name == "":
break
if name not in kaffeeliste:
print("Diese Person kenne ich nicht!")
continue
getränk = input("Getränk (Kaffee/Tee): ")
if getränk.lower() == "kaffee":
kaffeeliste[name] += 1
print(kaffeeliste[name])
elif getränk.lower() == "tee":
teeliste[name] += 1
print(teeliste[name])
else:
print("Unbekanntes Getränk!")
print("Kaffeeliste: ", kaffeeliste)
print("Teeliste: ", teeliste)
Obiger Programmierstil eignet sich nicht, wenn wir weitere Getränke aufnehmen wollen. Wir bräuchten jedesmal eine eigene Liste. Es ist bedeutend besser eine Unterliste mit den Getränken zu verwenden:
getränkekonsum = {"Peter": {"Tee": 0,
"Kaffee": 0},
"Eva": {"Tee": 0,
"Kaffee": 0},
"Franka": {"Tee": 0,
"Kaffee": 0}}
while True:
name = input("Name: ").capitalize()
if name == "":
break
if name not in getränkekonsum: # gibt keinen Key "name"
antwort = input("Sollen wir " + name + " in Liste aufnehmen? (j/n)")
if antwort in ["j", "ja", "Ja", "y"]:
getränkekonsum[name] = {"Tee": 0, "Kaffee": 0}
else:
print("Dann gibt's nichts zu trinken für " + name + "!")
continue
getränk = input("Getränk (Kaffee/Tee): ").capitalize()
if getränk in getränkekonsum[name]:
getränkekonsum[name][getränk] += 1
else:
print("Sorry, dieses Getränk führen wir nicht!")
print(getränkekonsum)
Das vorige Beispiel verallgemeinern wir noch weiter, um einfacher ein solches Dictionary aufbauen zu können. Das print
haben wir eingebaut, dass man leichter verfolgen kann, wie dieses Dictionary mittels for
-Schleifen aufgebaut wird:
getränke = ["Tee", "Kaffee", "Kakao", "Gemüsebrühe"]
namen = ["Peter", "Eva", "Sarah", "Eddie", "Swen"]
getränkekonsum = {}
for name in namen:
getränkekonsum[name] = {}
print(getränkekonsum)
for getränk in getränke:
getränkekonsum[name][getränk] = 0
supermarket = {"milk": {"quantity": 20, "price": 1.19},
"biscuits": {"quantity": 32, "price": 1.45},
"butter": {"quantity": 20, "price": 2.29},
"cheese": {"quantity": 15, "price": 1.90},
"bread": {"quantity": 15, "price": 2.59},
"cookies": {"quantity": 20, "price": 4.99},
"yogurt": {"quantity": 18, "price": 3.65},
"apples": {"quantity": 35, "price": 3.15},
"oranges": {"quantity": 40, "price": 0.99},
"bananas": {"quantity": 23, "price": 1.29}}
total_value = 0
for article, numbers in supermarket.items():
quantity = numbers["quantity"]
price = numbers["price"]
product_price = quantity * price
article = article + ':'
print(f"{article:15s} {product_price:08.2f}")
total_value += product_price
print("="*24)
print(f"Gesamtsumme: {total_value:08.2f}")