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}")
    

 
 Buch kaufen
Buch kaufen
 Buch kaufen
Buch kaufen
 Buch kaufen
Buch kaufen

