Abschnitt 7 · Lektion 2
Durch ein Dictionary laufen
Zum Nachschlagen musst du den Schlüssel kennen. Oft ist es aber umgekehrt. Du willst die ganze Preisliste ausdrucken, den ganzen Lagerbestand durchgehen oder alles zusammenzählen, und welche Schlüssel darin stehen, weißt du vorher gar nicht.
Dafür ist die for-Schleife da. Bei einem Dictionary gibt es drei Wege, über die Schlüssel, über
die Paare und über die Werte.
Über die Schlüssel
preise = {"Milch": 1.19, "Brot": 2.49, "Eier": 3.29, "Butter": 2.29}
for artikel in preise:
print(artikel, preise[artikel]) Eine for-Schleife über ein Dictionary läuft über seine Schlüssel, einen je Runde. Den Wert
holst du dir in der Schleife mit den eckigen Klammern. Einen KeyError gibt es dabei nicht, denn
jeder Schlüssel kommt ja aus dem Dictionary selbst.
Schlüssel und Wert zusammen
preise = {"Milch": 1.19, "Brot": 2.49, "Eier": 3.29, "Butter": 2.29}
for paar in preise.items():
print(paar)
for artikel, preis in preise.items():
print(f"{artikel:<8}{preis:>6.2f}") Bequemer geht es mit items() (Einträge). Damit bekommst du in jeder Runde ein Paar aus Schlüssel
und Wert, und in der ersten Schleife siehst du, dass es ein Tupel ist. Stehen nach dem for zwei
Namen, wird es gleich ausgepackt, genau wie bei enumerate und zip. Dann hat jeder Teil seinen
eigenen Namen, und die Zeile mit den Spalten liest sich fast wie ein Satz.
Sobald in der Schleife beides gebraucht wird, sieht man diese Form am häufigsten. Mit
for artikel in preise und preise[artikel] kommt dasselbe heraus. Es wird nur in jeder Runde
einmal mehr nachgeschlagen.
Nur die Werte
preise = {"Milch": 1.19, "Brot": 2.49, "Eier": 3.29, "Butter": 2.29}
print(f"{sum(preise.values()):.2f}")
print(max(preise.values()))
print(max(preise)) values() (Werte) liefert nur die Werte, ohne die Schlüssel. Damit funktionieren sum und max
wie bei einer Liste. Die vier Artikel kosten zusammen 9,26 Euro, und der teuerste kostet 3,29 Euro.
Warum das values() wichtig ist, steht in der letzten Zeile. max(preise) antwortet mit Milch,
und Milch ist nicht der teuerste Artikel. Ohne values() sieht max nur die Schlüssel, also
gewinnt das Wort, das im Alphabet am weitesten hinten steht, und das ist von den vier eben Milch.
Welcher Artikel 3,29 Euro kostet, verrät max(preise.values()) übrigens nicht. Du bekommst nur die
Zahl. Den Schlüssel zum größten Wert zu finden oder ein Dictionary nach seinen Werten zu sortieren,
geht mit einem Werkzeug aus Lektion 8.7. Bis dahin hilft die Schleife, die sich den teuersten Tag
gemerkt hat.
Die Reihenfolge
bestand = {}
bestand["Milch"] = 3
bestand["Brot"] = 12
bestand["Eier"] = 30
print(bestand)
print(sorted(bestand))
for artikel in sorted(bestand):
print(artikel, bestand[artikel])
for artikel, stueck in sorted(bestand.items()):
print(artikel, stueck) Ein Dictionary merkt sich die Reihenfolge, in der die Paare hineingekommen sind, und jede Schleife geht sie genau so durch. Hier also Milch, Brot, Eier, weil die Inventur so gelaufen ist. Mit dem Alphabet hat das nichts zu tun. Wenn eine Ausgabe in einer bestimmten Reihenfolge erscheinen soll, wird deshalb sortiert. Auf die Reihenfolge des Hineinkommens verlässt man sich nur, wenn sie wirklich gemeint ist.
Dafür gibt es sorted(). Bei einem Dictionary gibt es eine Liste seiner Schlüssel zurück, nach dem
Alphabet sortiert, und über diese Liste läuft die Schleife. Das Dictionary selbst bleibt, wie es
war.
Wenn du lieber mit Paaren arbeitest, nimmst du sorted(bestand.items()). Tupel werden zuerst nach
ihrem ersten Teil sortiert. Das ist hier der Schlüssel, und den gibt es nur einmal. Beide Schleifen
geben dasselbe aus.
Was die Aufgabe will
Mias Laden „Zur Ecke“ macht Inventur. Der Bestand kommt als Dictionary an, in der Reihenfolge, in der gezählt wurde, und daraus wird eine Liste nach dem Alphabet. Wo weniger als fünf Stück im Regal liegen, steht dahinter, dass nachbestellt werden muss.
Zum Mitnehmen
Eine for-Schleife über ein Dictionary bekommt in jeder Runde einen Schlüssel, mit items() Schlüssel und Wert zusammen und mit values() nur die Werte. Die Reihenfolge ist die, in der alles hineinkam. Nach dem Alphabet geht es erst mit sorted().
Jetzt du
Basis Konto, kostenlosZu dieser Lektion gehört eine Aufgabe. Du schreibst den Code selbst, und nach jedem Lauf sagt dir eine Prüfliste, was schon stimmt.
Dafür brauchst du das Basis Konto. Es kostet nichts, und ein Passwort gibt es auch nicht.
In diesem Kurs läuft dein Code auf einem Server. Dafür hat das Basis Konto 1 Stunde im Monat, mehr Zeit gibt es mit dem Premium Konto.
Was in dieser Lektion steckt
-
Artikel mit 4 Beispielen zum Ausprobieren
Steht hier, ohne Konto lesbar.
-
Aufgabe, dein Code läuft auf einem Server
Öffnet sich mit dem Basis Konto.