Python-DictionariesVERSTEHEN · AUSPROBIEREN · SELBST PROGRAMMIEREN
START · 3 MINUTEN
Dein Lernweg
Von der Liste zur benannten Zuordnung
Du kannst bereits mit Variablen, Bedingungen, Schleifen, Strings und Listen arbeiten. Jetzt kommt ein Datentyp dazu, mit dem du Informationen unter passenden Namen ablegst: das Dictionary, kurz dict. Dieser Kurs führt dich vom ersten Beispiel bis zu einem eigenen kleinen Programm.
Verstehen
Du unterscheidest Schlüssel und Wert und erklärst den Unterschied zur Liste.
Anwenden
Du legst Dictionaries an, liest und änderst Einträge und verwendest Methoden.
Selbst entwickeln
Du wählst sinnvolle Schlüssel, durchläufst Daten und zählst Häufigkeiten.
So arbeitest du mit dem Kurs
Lies die Erklärung. Sage bei jedem Codebeispiel zuerst voraus, was passiert.
Übertrage Beispiele und Übungen in euren Python-Editor und führe sie aus. Jede abgesetzte Beispielbox ist für sich gedacht, sofern ausdrücklich nichts anderes angegeben ist.
Notiere deine Lösung im Kurs oder in deinem Heft. Klappe die Musterlösung erst danach auf.
Markiere ein Kapitel als bearbeitet, wenn du es verstanden hast. Über die Navigation kannst du jederzeit zurückspringen.
Der Kurs selbst ist kein Python-Interpreter. Das Modell in Kapitel 4 zeigt ausgewählte Dictionary-Operationen. Programmcode führst du in eurem Python-Editor aus. Notizen und Fortschritt werden, soweit dein Browser es erlaubt, nur in diesem Browser auf diesem Gerät gespeichert. Sie werden nicht an die Lehrkraft übermittelt. Auf gemeinsam genutzten Geräten kannst du sie am Ende zurücksetzen.
1 · VERSTEHEN
Die Grundidee
Eine Information hat eine Adresse
Stell dir einen Steckbrief vor. Links steht die Frage „Name?“, rechts die Antwort „Mia“. Ein Dictionary speichert genau solche Zuordnungen: Zu einem Schlüssel gehört ein Wert. Der Schlüssel ist die Adresse, unter der du den Wert später wiederfindest.
Sprich den Zugriff laut aus: schueler["name"] bedeutet „Hole aus dem Dictionary schueler den Wert zum Schlüssel "name"“. Es bedeutet nicht „Hole das erste Element“.
Das kennst du schon von Listen – hier ist es anders
Liste
Dictionary
["Mia", 17, 12]
{"name": "Mia", "alter": 17, "punkte": 12}
Zugriff über Position: daten[0]
Zugriff über Schlüssel: daten["name"]
Du musst wissen, was die Position bedeutet.
Ein sinnvoller Schlüssel benennt die Bedeutung.
Listen passen etwa zu einer Folge von Rundenzeiten. Dictionaries passen zu Eigenschaften eines Steckbriefs oder zu Zuordnungen wie Produkt → Preis. Ein Dictionary ersetzt also nicht jede Liste: Du wählst die Struktur nach dem Problem.
DU BIST DRAN · ÜBUNG 1
Die passende Struktur wählen
Entscheide jeweils: Liste oder Dictionary? Begründe kurz: a) fünf nacheinander gemessene Zeiten; b) die Zuordnung jeder Artikelnummer zu einem Preis; c) Titel, Autor und Seitenzahl eines Buches.
Musterlösung und Erklärung ansehen
a) Liste: eine Folge von Messwerten. b) Dictionary: Artikelnummer → Preis. c) Dictionary: benannte Eigenschaften, zum Beispiel {"titel": "Tschick", "autor": "Wolfgang Herrndorf", "seiten": 256}. Die Seitenzahl hängt bei echten Büchern von der Ausgabe ab; hier ist sie nur ein Beispieldatum.
schueler ist der frei gewählte Variablenname. Verwende einen Namen, der den Inhalt beschreibt.
= weist der Variablen das neue Dictionary zu.
{ } umschließen das Dictionary. Eine leere Zuordnung schreibst du als {}.
Innerhalb eines Paares trennt : den Schlüssel vom Wert.
Ein Komma trennt zwei Paare. Ein abschließendes Komma nach dem letzten Paar ist erlaubt.
Die Zeilenumbrüche machen einen längeren Steckbrief übersichtlicher. Sie ändern den Inhalt nicht. Schlüssel und Werte, die Texte sind, brauchen Anführungszeichen. Zahlen schreibst du als Zahlen, wenn du damit rechnen möchtest.
Erst planen, dann programmieren
Frage dich: Was beschreibt ein Eintrag? Wonach möchte ich später suchen? Welche Datentypen passen? Für einen Schülersteckbrief bieten sich die stabilen Feldnamen "name", "alter" und "punkte" an. „Mia“ ist dabei der Wert und nicht der Feldname.
PYTHON 3
buch = {
"titel": "Die Zeitmaschine",
"seiten": 120,
"ausgeliehen": False,
"stichworte": ["Abenteuer", "Zeitreise"]
}
print(buch["seiten"] + 1)
print(buch["stichworte"][0])
Ausgabe
121
Abenteuer
Werte können verschiedene Typen haben: hier Text, Ganzzahl, Wahrheitswert und Liste. Beim letzten Zugriff holt buch["stichworte"] zuerst die Liste; [0] wählt dann deren erstes Element.
DU BIST DRAN · ÜBUNG 2
Dein erster eigener Datensatz
Lege spiel an: Titel „Pixelreise“, Mindestalter 12 und Mehrspielermodus True. Wähle sinnvolle Schlüssel. Gib danach nur den Titel aus.
Ein kleiner Denkanstoß
Nutze geschweifte Klammern außen, Doppelpunkte innerhalb der Paare und Kommas zwischen den Paaren.
schueler["ort"] würde hier einen KeyError auslösen. Das Programm stoppt an dieser Stelle, wenn du den Fehler nicht behandelst. Mit get() kannst du dagegen bewusst festlegen, was bei einem fehlenden Schlüssel zurückkommen soll.
Schreibweise
Schlüssel vorhanden
Schlüssel fehlt
d["ort"]
zugehöriger Wert
KeyError
d.get("ort")
zugehöriger Wert
None
d.get("ort", "unbekannt")
zugehöriger Wert
"unbekannt"
Die beiden Angaben in get
In get("ort", "unbekannt") ist die erste Angabe der gesuchte Schlüssel. Die zweite ist ein Ersatzwert. None bedeutet, dass hier kein konkreter Wert zurückgegeben wurde; es ist nicht der Text "None" und auch nicht die Zahl 0.
PYTHON 3
schueler = {"name": "Mia", "punkte": 0}
ort = schueler.get("ort", "unbekannt")
print(ort)
print(schueler.get("punkte", 99))
print("ort" in schueler)
Ausgabe
unbekannt
0
False
get() verändert das Dictionary nicht. Der Ersatzwert wird nur zurückgegeben und nicht als neuer Eintrag gespeichert. Der vorhandene Wert 0 bleibt 0; er wird nicht durch 99 ersetzt. Auch ein bereits gespeichertes None würde nicht durch den Ersatzwert ersetzt.
DU BIST DRAN · ÜBUNG 3
Ausgaben vorhersagen
Nutze konto = {"name": "Ada", "guthaben": 0}. Welche Ergebnisse liefern a) konto.get("name", "Gast"), b) konto.get("guthaben", 10), c) konto.get("kurs", "offen") und d) konto.get("kurs")? Ist danach ein Schlüssel "kurs" vorhanden?
Musterlösung und Erklärung ansehen
a) "Ada"; b) 0; c) "offen"; d) None. Der Schlüssel „kurs“ wird nicht ergänzt. Die Rückgabe eines Werts ist etwas anderes als das Speichern eines Eintrags.
4 · MIT DATEN ARBEITEN
Ergänzen und verändern
Eine Schreibweise, zwei Wirkungen
Du verwendest eine Zuweisung an einen Schlüssel: dictionary[schluessel] = wert. Wenn der Schlüssel neu ist, entsteht ein Paar. Wenn er schon existiert, wird sein Wert ersetzt.
In der letzten Zuweisung wird zuerst rechts der alte Wert 13 gelesen und 2 addiert. Dann wird links unter demselben Schlüssel der Wert 15 gespeichert. Du brauchst kein append(): Diese Listenmethode gehört nicht zum Dictionary.
Interaktives Modell
Wähle eine Aktion und beobachte die Zuordnung. Die Schlüssel sind in diesem Modell Texte, die Werte können Text oder ganze Zahlen sein. Das Modell führt nur die angebotenen Operationen vor.
Schlüssel
Wert
DU BIST DRAN · ÜBUNG 4
Ein vorhandenes Dictionary weiterführen
Beginne mit team = {"name": "Füchse", "punkte": 6}. Ergänze den Schlüssel "mitglieder" mit dem Wert 5. Erhöhe die Punktzahl um 3 und gib das gesamte Dictionary aus.
Das gesamte Dictionary wird ausgegeben. Es enthält drei Paare, nicht sechs Einträge.
5 · DEN INHALT UNTERSUCHEN
Zählen und prüfen
Was zählt len und was prüft in?
PYTHON 3
schueler = {"name": "Mia", "alter": 17, "punkte": 12}
print(len(schueler))
print("name" in schueler)
print("Mia" in schueler)
print("Mia" in schueler.values())
Ausgabe
3
True
False
True
len() zählt die Schlüssel-Wert-Paare. Ein Paar besteht zwar aus zwei zusammengehörenden Teilen, zählt aber als ein Eintrag. in sucht bei einem Dictionary standardmäßig unter den Schlüsseln. Für eine Suche unter den Werten nutzt du .values().
keys() liefert eine Ansicht der Schlüssel, values() eine Ansicht der Werte und items() eine Ansicht der Paare. Eine solche Ansicht ist keine gewöhnliche Liste; sie spiegelt den aktuellen Dictionary-Inhalt wider und lässt sich mit einer Schleife durchlaufen. Die runden Klammern in der Ausgabe von items() bündeln jeweils einen Schlüssel mit seinem Wert.
Wenn du wirklich eine Liste der Schlüssel brauchst, kannst du sie ausdrücklich erzeugen: schluessel = list(schueler.keys()). Für die Schleifen im nächsten Kapitel brauchst du diese Umwandlung nicht.
DU BIST DRAN · ÜBUNG 5
Prüfe die richtigen Informationen
Lege preise = {"Apfel": 1, "Birne": 1, "Saft": 2} an. Gib a) die Anzahl der Produkte, b) die Antwort darauf, ob „Saft“ als Schlüssel existiert, und c) die Antwort darauf, ob der Preis 1 unter den Werten vorkommt, aus.
Musterlösung und Erklärung ansehen
PYTHON 3
preise = {"Apfel": 1, "Birne": 1, "Saft": 2}
print(len(preise))
print("Saft" in preise)
print(1 in preise.values())
Ausgabe
3
True
True
Dass Apfel und Birne denselben Preis haben, ist erlaubt. Ihre Schlüssel sind trotzdem verschieden.
pop("alter") entfernt das ganze Paar und gibt dessen Wert 17 zurück. Die Variable entfernt speichert diesen Rückgabewert. del schueler["punkte"] entfernt das Paar ebenfalls, liefert aber keinen Wert zum Speichern zurück. del ist eine Anweisung und wird nicht mit einem Punkt an das Dictionary angehängt.
Fehlt der Schlüssel, führen sowohl del d["fehlt"] als auch d.pop("fehlt") zu einem KeyError. Bei pop() kannst du einen Ersatzwert mitgeben:
Beginne mit profil = {"name": "Ada", "kurs": "11", "test": 4}. Entferne „test“ mit pop() und speichere den Wert in alte_punkte. Lösche danach „kurs“ mit del. Gib die gespeicherten Punkte und das verbleibende Dictionary aus.
Du kennst for zeichen in text und for wert in liste. Auch ein Dictionary lässt sich direkt durchlaufen. Entscheidend ist, welche Folge du hinter in angibst.
Variante 1: Schlüssel
PYTHON 3
punkte = {"Ada": 10, "Ben": 8}
for name in punkte:
print(name)
Ausgabe
Ada
Ben
Im ersten Durchlauf enthält name den Schlüssel "Ada", im zweiten "Ben". Der Variablenname ist frei wählbar. Er entscheidet nicht, was durchlaufen wird. Dasselbe gilt für for name in punkte.keys():.
Variante 2: Werte
PYTHON 3
punkte = {"Ada": 10, "Ben": 8}
gesamt = 0
for wert in punkte.values():
gesamt = gesamt + wert
print(gesamt)
Ausgabe
18
Jetzt erhält wert nacheinander 10 und 8. Wie bei Listen kannst du mit einer Summenvariablen rechnen.
Variante 3: Schlüssel und Wert gemeinsam
PYTHON 3
punkte = {"Ada": 10, "Ben": 8}
for name, wert in punkte.items():
print(name, "hat", wert, "Punkte")
Ausgabe
Ada hat 10 Punkte
Ben hat 8 Punkte
items() liefert pro Durchlauf ein Paar. Links von in stehen deshalb zwei Variablen, getrennt durch ein Komma. Python verteilt den Schlüssel in die erste und den Wert in die zweite Variable. Du kannst die Schleife als „für jeden Namen und seine Punktzahl“ lesen. range() ist dafür nicht nötig.
DU BIST DRAN · ÜBUNG 7
Punktzahlen auswerten
Nutze punkte = {"Ada": 10, "Ben": 8, "Cem": 13}. Gib mit items() nur die Namen und Punktzahlen ab 10 aus. Berechne außerdem mit einer Schleife die Summe aller Punktzahlen.
Musterlösung und Erklärung ansehen
PYTHON 3
punkte = {"Ada": 10, "Ben": 8, "Cem": 13}
gesamt = 0
for name, wert in punkte.items():
gesamt = gesamt + wert
if wert >= 10:
print(name, wert)
print("Gesamt:", gesamt)
Ausgabe
Ada 10
Cem 13
Gesamt: 31
Die Addition steht außerhalb des if-Blocks, aber innerhalb der Schleife. Deshalb zählt Bens Punktzahl bei der Gesamtsumme mit.
8 · FREIWILLIGE VERTIEFUNG
Daten sinnvoll modellieren
Braucht jede Person eine eigene Variable?
Für ein erstes Beispiel ist schueler = {...} übersichtlich. Wenn du mehrere Personen speichern möchtest, brauchst du aber nicht für jede eine neue Variable wie schueler1, schueler2 und schueler3. Du kannst bekannte Strukturen kombinieren.
Eine Liste von Steckbriefen
PYTHON 3
klasse = [
{"name": "Mia", "punkte": 12},
{"name": "Ben", "punkte": 9}
]
print(klasse[0]["name"])
for person in klasse:
print(person["name"], person["punkte"])
Ausgabe
Mia
Mia 12
Ben 9
Die äußere Struktur ist eine Liste: klasse[0] liefert den ersten Steckbrief. Dieser ist ein Dictionary; ["name"] holt daraus den Namen. Das sind zwei nacheinander ausgeführte Zugriffe.
Hier ist eine eindeutige Schüler-ID der äußere Schlüssel. So kannst du direkt nach einer Person suchen. Namen sind dafür nicht immer geeignet: Zwei Personen können denselben Namen haben. Die Schlüssel "name" dürfen in den inneren Dictionaries wiederkehren, weil die Eindeutigkeit jeweils innerhalb eines Dictionarys gilt.
DU BIST DRAN · ÜBUNG 8
Eine passende Zuordnung planen
Zwei Personen heißen „Alex“. Du möchtest ihre Punkte in einer Sammlung speichern und sie zuverlässig unterscheiden. Beschreibe ein geeignetes Schlüsselsystem und lege zwei beispielhafte Datensätze an.
Die IDs sind eindeutig, die Anzeigenamen müssen es nicht sein. Ein äußeres Dictionary mit zweimal dem Schlüssel „Alex“ würde einen Datensatz überschreiben.
9 · ANWENDUNG AUS DEM SKRIPT
Häufigkeiten zählen
Ein Wort wird zum Schlüssel
Im Skript sollst du Wörter einer Liste zählen. Das ist ein typischer Dictionary-Einsatz: Der Schlüssel ist das Wort, der Wert seine bisher gezählte Häufigkeit. Eine Liste allein enthält zwar die Wörter, aber noch nicht diese Zuordnung.
PYTHON 3
woerter = ["rot", "blau", "rot", "grün", "blau"]
haeufigkeiten = {}
for wort in woerter:
if wort in haeufigkeiten:
haeufigkeiten[wort] = haeufigkeiten[wort] + 1
else:
haeufigkeiten[wort] = 1
print(haeufigkeiten)
Ausgabe
{'rot': 2, 'blau': 2, 'grün': 1}
Die leere Zuordnung entsteht vor der Schleife, damit frühere Zählungen erhalten bleiben.
Die Schleife holt jeweils ein Wort aus der Liste.
Ist dieses Wort schon Schlüssel, wird sein bisheriger Zähler erhöht.
Bei einem neuen Wort wird der Zähler mit 1 angelegt.
Lies die entscheidende Zeile von rechts nach links: get(wort, 0) liefert den bisherigen Zähler oder bei einem neuen Wort 0. Danach wird 1 addiert. Erst die Zuweisung links speichert das Ergebnis. get() allein würde den Zähler nicht anlegen.
DU BIST DRAN · ÜBUNG 9
Zählungen aus einem Text
Verarbeite text = "Hund katze Hund Maus katze". Vereinheitliche die Schreibweise mit lower(), zerlege den Text mit split() und zähle die Wörter in einem Dictionary. Gib danach jedes Wort mit seiner Häufigkeit in einer eigenen Zeile aus. Satzzeichen brauchst du in diesem Testtext nicht zu behandeln.
Ein kleiner Denkanstoß
Du kennst alle Bausteine: lower → split → leeres Dictionary → for-Schleife → Zähler lesen und um 1 erhöhen.
Musterlösung und Erklärung ansehen
PYTHON 3
text = "Hund katze Hund Maus katze"
haeufigkeiten = {}
for wort in text.lower().split():
haeufigkeiten[wort] = haeufigkeiten.get(wort, 0) + 1
for wort, anzahl in haeufigkeiten.items():
print(wort, anzahl)
Ausgabe
hund 2
katze 2
maus 1
10 · SELBST PROGRAMMIEREN
Dein Abschlussprojekt
Eine kleine Materialausleihe
In einem Unterrichtsraum wird Material ausgeliehen. Das Dictionary speichert Gegenstand → verfügbare Anzahl. Schreibe ein Programm, das genau einen Ausleihwunsch verarbeitet.
PYTHON 3
bestand = {"schere": 3, "kleber": 0, "lineal": 2}
Lies einen Gegenstand ein und bereinige die Eingabe mit strip().lower().
Prüfe, ob der Gegenstand überhaupt als Schlüssel im Bestand steht. Wenn nicht, gib „Unbekannter Gegenstand“ aus und ergänze keinen Eintrag.
Ist er bekannt und seine Anzahl größer als 0, verringere den Bestand um 1 und gib „Ausleihe möglich“ aus.
Ist er bekannt, aber nichts mehr verfügbar, gib „Derzeit nicht verfügbar“ aus.
Gib abschließend alle Gegenstände und ihre aktuellen Anzahlen mit einer Schleife aus.
DU BIST DRAN · ÜBUNG 10
Von der Anforderung zum Programm
Schreibe jetzt deinen vollständigen Lösungsweg. Beginne jeden Test mit dem ursprünglichen Dictionary. Prüfe „Schere“, „kleber“ und „heft“ sowie die Eingabe „ LINEAL “.
Ein kleiner Denkanstoß
Ein unbekannter Gegenstand ist etwas anderes als ein bekannter mit Bestand 0. Prüfe zuerst mit in oder not in, ob der Schlüssel existiert. Danach brauchst du eine zweite Bedingung für die Anzahl.
Musterlösung und Erklärung ansehen
PYTHON 3
bestand = {"schere": 3, "kleber": 0, "lineal": 2}
wunsch = input("Gegenstand: ").strip().lower()
if wunsch not in bestand:
print("Unbekannter Gegenstand")
elif bestand[wunsch] > 0:
bestand[wunsch] = bestand[wunsch] - 1
print("Ausleihe möglich")
else:
print("Derzeit nicht verfügbar")
for gegenstand, anzahl in bestand.items():
print(gegenstand, anzahl)
Eingabe beim frischen Start
Erwartetes Verhalten
Schere
Ausleihe möglich; schere wird 2.
kleber
Derzeit nicht verfügbar; kleber bleibt 0.
heft
Unbekannter Gegenstand; kein neuer Eintrag.
zwei Leerzeichen + LINEAL + zwei Leerzeichen
Ausleihe möglich; lineal wird 1.
Die Reihenfolge der Bedingungen ist wichtig: Erst wird geprüft, ob der Schlüssel existiert. Nur dann wird sein Wert mit eckigen Klammern gelesen.
Kannst du das schon erklären?
Ich kann begründen, warum Gegenstände hier Schlüssel und Anzahlen Werte sind.
Ich kann erklären, warum der neue Wert rechts zuerst berechnet wird.
Ich kann einen unbekannten Schlüssel sicher von einem Bestand 0 unterscheiden.
11 · SICHERN
Überblick und Vertiefung
Deine Übersicht zum Nachschlagen
Die bekannte Grafik fasst die Befehle zusammen. Öffne sie groß oder lade sie herunter. Verwende sie beim nächsten Programm als Gedächtnisstütze.
Deine Dictionary-Übersicht · Alle Befehle werden in den vorangehenden Kapiteln ausführlich erklärt.Übersicht als PNG herunterladen
Was die Grafik verkürzt ausdrückt
„Schlüssel müssen unveränderlich sein“ ist eine hilfreiche Einstiegsregel. Fachlich präzise müssen sie hashbar sein; Strings und Zahlen passen zu unseren Beispielen. keys(), values() und items() liefern Ansichten und keine gewöhnlichen Listen. Die Einfügereihenfolge ist erhalten, aber der Zugriff bleibt schlüsselbasiert.
Die wichtigsten Schreibweisen auf einen Blick
Absicht
Python-Muster
Leeres Dictionary
d = {}
Wert lesen
d["name"]
Mit Ersatzwert lesen
d.get("name", "unbekannt")
Ergänzen oder ersetzen
d["punkte"] = 12
Paare zählen
len(d)
Schlüssel prüfen
"name" in d
Werte prüfen
12 in d.values()
Wert entfernen und erhalten
wert = d.pop("punkte")
Eintrag löschen
del d["punkte"]
Paare durchlaufen
for key, wert in d.items():
Kurzer Abschlusscheck
Zum Abschluss: ein Video zum Wiederholen
YOUTUBE · DEUTSCHSPRACHIG
Python Tutorial Deutsch | Komplettkurs für Anfänger
Fabian Rappert · Data Science Institute
Nutze gezielt das Kapitel „Dictionaries“ von 02:52:00 bis 03:10:26 (etwa 18 Minuten). Du brauchst nicht den gesamten mehrstündigen Kurs anzusehen. Der Link springt zum Kapitelanfang; beende die Wiederholung vor dem anschließenden Kapitel über Funktionen.
Das Video öffnet sich erst nach deinem Klick auf YouTube. Der Kurs lädt vorher keine YouTube-Inhalte. Für das Video ist Internet nötig. Kapitelangaben laut Videobeschreibung.
Aktiver Sehauftrag
Notiere eine Erklärung für „Schlüssel-Wert-Paar“ in eigenen Worten.
Halte an einem Dictionary-Beispiel an und sage die nächste Ausgabe voraus.
Schreibe anschließend ohne Vorlage ein Dictionary und ändere einen Wert darin.
Fachliche Quellen und Anschluss an euren Unterricht
Dieser Lernweg vertieft Einheit 8 des Unterrichtsskripts „Python Unterrichtsskript Oberstufe Thüringen gA“, besonders Schlüssel-Wert-Zuordnungen, sichere Zugriffe und das Zählen von Worthäufigkeiten. Die bereitgestellte Übersicht ist als Originalgrafik eingebunden.