Listen und Dictionaries

Wie man in Python Daten ablegt, ohne sich später zu ärgern — die Standard-Container.

Grundlagen 13 min Einsteiger 26. April 2026

Bisher speichert jede Variable genau einen Wert — eine Zahl, einen String, ein Boolean. Aber echte Programme arbeiten mit Sammlungen: eine Liste mit 1.000 Studentennamen, ein Nutzerprofil mit Name, Alter und Stadt, oder eine API-Antwort mit hunderten Datenpunkten. 1.000 einzelne Variablen zu verwalten ist wie 1.000 lose Zettel statt eines geordneten Notizbuchs.

Python bietet zwei fundamentale Sammlungstypen: Listen für geordnete Sequenzen (wenn die Reihenfolge zählt) und Dictionaries für Schlüssel-Wert-Paare (wenn du nach Namen nachschlagen willst). Diese beiden Strukturen sind so zentral, dass fast jedes Python-Programm mindestens eine davon verwendet.

Listen — Geordnete Sammlungen mit nummerierten Plätzen

Liste (list)

AnalogieDefinition
Eine Liste ist wie ein nummeriertes Regal in einer Werkstatt. Jedes Fach hat eine Nummer, beginnend bei 0 — Fach 0, Fach 1, Fach 2. Du kannst jeden Gegenstand in jedes Fach legen, neue Fächer am Ende anhängen (append), ein Fach entfernen und alles danach nachrutschen lassen (pop), oder ein neues Fach in der Mitte einfügen (insert). Um etwas zu finden, kennst du entweder die Fachnummer (Indexzugriff) oder du schaust alle Fächer durch (der in-Operator).

Die Regal-Analogie passt gut für nummerierte Positionen und das Verschieben bei Einfügen/Entfernen. Sie bricht, weil ein echtes Regal eine feste Anzahl Fächer hat — Python-Listen wachsen dynamisch. Außerdem haben Regalfächer physische Größenbeschränkungen, während Python-Listen beliebige Objekte halten können, inklusive anderer Listen.

Einkaufsliste Schritt für Schritt

1
einkauf = ["Brot", "Milch", "Äpfel"] → 3 Elemente an Position 0, 1, 2
2
einkauf.append("Käse") → 4 Elemente: [..., "Käse"] an Position 3
3
print(einkauf[0]) → "Brot" (erstes Element = Index 0)
4
einkauf.pop(1) → entfernt "Milch", Liste: ["Brot", "Äpfel", "Käse"]
5
"Milch" in einkauf → False (wurde entfernt)

Jeder Schritt zeigt den Zustand der Liste nach der Operation. Beachte: Nach pop(1) rutschen alle Elemente rechts davon eine Position nach links.

Vorsicht: IndexError

Der Index muss zwischen 0 und len(liste) - 1 liegen. Ein Zugriff außerhalb dieser Grenzen löst einen IndexError aus. Weil Python bei 0 anfängt, ist liste[3] das vierte Element — nicht das dritte.

farben = ["rot", "grün", "blau"]
print(farben[3])   # IndexError: list index out of range
# Gültige Indizes: 0, 1, 2

Dictionaries — Nachschlagen statt Durchzählen

Dictionary (dict)

AnalogieDefinition
Ein Dictionary ist wie ein Telefonbuch. Du schlägst nicht "den 47. Eintrag" nach — du suchst einen Namen (den Key), um die Telefonnummer (den Value) zu finden. Das Telefonbuch garantiert, dass jeder Name nur einmal vorkommt (eindeutige Keys), und das Nachschlagen ist schnell, egal wie dick das Buch ist. Wenn du einen Namen suchst, der nicht eingetragen ist, bekommst du einen Fehler (KeyError) — oder du fragst mit .get(): "Hast du Max Müller? Wenn nicht, sag einfach 'unbekannt'."

Die Telefonbuch-Analogie passt für Key-basierten Zugriff und Eindeutigkeit. Sie bricht, weil ein echtes Telefonbuch alphabetisch sortiert ist — Python-Dicts nutzen Hash-Tabellen, nicht alphabetische Ordnung. Außerdem enthält ein Telefonbuch nur Name-Nummer-Paare, während Python-Dicts beliebige Werte abbilden können, inklusive verschachtelter Dicts und Listen.

Beispiel: Personendaten

person = {"name": "Anna", "alter": 28, "stadt": "Berlin"}

print(person["alter"])                    # 28
person["beruf"] = "Ingenieurin"            # neues Key-Value-Paar
print(person.get("hobby", "unbekannt"))    # "unbekannt" (kein Fehler)

for key, value in person.items():
    print(f"{key}: {value}")               # gibt alle Paare aus

Der .get()-Aufruf ist das sichere Gegenstück zu person["hobby"], das mit KeyError abstürzen würde. Verwende .get() immer dann, wenn du nicht sicher bist, ob ein Key existiert.

Liste

Geordnete Sequenz. Zugriff über Index (Position). Verwende Listen, wenn die Reihenfolge wichtig ist: Einkaufslisten, Schrittfolgen, Sammlungen zum Durchlaufen.

Dictionary

Schlüssel-Wert-Zuordnung. Zugriff über Key (Name). Verwende Dicts, wenn du nach Namen nachschlagen willst: Nutzerprofile, Konfigurationen, Wortzähler.

Vorsicht: KeyError

Ein Zugriff mit dict[key] auf einen nicht existierenden Key löst einen KeyError aus. Verwende stattdessen .get(key, default) für sicheren Zugriff.

person = {"name": "Anna"}
print(person["hobby"])                     # KeyError: 'hobby'
print(person.get("hobby", "unbekannt"))    # "unbekannt" (kein Fehler)

Aliasing — Wenn zwei Namen ein Objekt teilen

Aliasing

AnalogieDefinition
Aliasing ist wie ein geteiltes Online-Dokument. Stell dir vor, du und ein Kollege habt beide einen Link zum selben Google Doc. Wenn dein Kollege einen Absatz ändert, siehst du die Änderung sofort — weil ihr beide dasselbe Dokument betrachtet, nicht getrennte Kopien. Eine Kopie mit a.copy() zu erstellen ist wie "Kopie erstellen" in Google Docs zu klicken — jetzt hat jeder seine eigene Version.

Die Dokument-Analogie passt für "zwei Links, ein Objekt". Sie bricht, weil in der Realität das Teilen eines Dokuments eine bewusste Entscheidung ist (du schickst einen Link), während Aliasing in Python automatisch und stillschweigend passiert, wenn du b = a schreibst. Anfänger merken nicht, dass sie das Objekt "teilen".

Die Aliasing-Falle Schritt für Schritt

1
a = [1, 2, 3] → Liste mit drei Elementen erstellt
2
b = a → b ist ein Alias, KEINE Kopie! Beide zeigen auf dieselbe Liste.
3
b.append(4) → Die Liste ist jetzt [1, 2, 3, 4]
4
print(a) → [1, 2, 3, 4] — a hat sich auch geändert! Fix: b = a.copy()

Aliasing ist lautlos und automatisch

b = a kopiert NICHT. Es erzeugt einen zweiten Namen für dasselbe Objekt. Verwende immer .copy() für eine unabhängige Kopie. Dies gilt für Listen UND Dictionaries.

# Alias (NICHT kopiert):
b = a
b.append(4)    # ändert auch a!

# Echte Kopie:
b = a.copy()
b.append(4)    # a bleibt unverändert
Liste Geordnete Sequenz mit nummerierten Positionen (ab 0)
Dictionary Schlüssel-Wert-Zuordnung für schnelles Nachschlagen
IndexError Zugriff auf eine Position außerhalb der Listenlänge
KeyError Zugriff auf einen Key, der im Dictionary nicht existiert

Interaktiv: Python-Sammlungstypen im Vergleich

Du kennst jetzt Listen und Dictionaries. Aber Python hat noch zwei weitere Sammlungstypen: Sets und Tuples. Klicke auf eine Zeile in der Vergleichs-Matrix, um die Eigenschaften und typischen Einsatzbereiche jedes Typs zu sehen. Achte besonders auf die Farbkodierung: Grün zeigt vorhandene Fähigkeiten, Rot zeigt Einschränkungen.

Python-Sammlungstypen im Vergleich

Vorteil (klein/schnell/hoch)
Neutral
Nachteil (groß/langsam/niedrig)

Zeile anklicken für Detailansicht

TypGeordnetVeränderbarDuplikateZugriff
list Index [i]
dict ✗ Keys Key ["k"]
set
tuple Index [i]
Kernaussage: Die Wahl des richtigen Sammlungstyps hängt von drei Fragen ab: Brauchst du eine bestimmte Reihenfolge? Soll die Sammlung veränderbar sein? Müssen Elemente eindeutig sein? Die Matrix zeigt auf einen Blick, welcher Typ welche Anforderungen erfüllt.

Guido van Rossum, der Erfinder von Python, erklärte die Entscheidung 2013 in einem Blogpost: Halboffene Intervalle wie a[:n] für die ersten n Elemente und a[n:] für den Rest funktionieren mit 0-basierten Indizes besonders sauber, ohne lästige +1/-1-Korrekturen. Dieses Design stammt aus der C-Tradition, die Python stark beeinflusst hat.

Ein praktischer Vorteil: len(liste) ist immer der erste ungültige Index — das macht Grenzprüfungen einfach.

JSON (JavaScript Object Notation) ist das Standardformat für Web-APIs, KI-Modellkonfigurationen und Datenaustausch. Beim Einlesen mit json.loads() werden JSON-Objekte direkt zu Python-Dicts und JSON-Arrays zu Python-Listen.

import json

api_antwort = '{"name": "GPT-4", "typ": "LLM", "parameter": [175, "Milliarden"]}'
daten = json.loads(api_antwort)

print(daten["name"])        # "GPT-4" (Dict-Zugriff)
print(daten["parameter"][0]) # 175 (verschachtelt: Dict → Liste)

Wer Listen und Dictionaries versteht, versteht damit auch den Aufbau realer Datenformate — von API-Antworten bis zu Konfigurationsdateien.

Das Wichtigste auf einen Blick

  1. Eine Liste ist eine geordnete, veränderbare Sequenz mit Indexzugriff (ab 0). Verwende Listen, wenn die Reihenfolge wichtig ist — Einkaufslisten, Schrittfolgen, Sammlungen zum Durchlaufen.
  2. Ein Dictionary ist eine veränderbare Sammlung von Schlüssel-Wert-Paaren mit Key-Zugriff. Verwende Dicts, wenn du nach Namen nachschlagen willst — Nutzerprofile, Konfigurationen, Wortzähler.
  3. b = a kopiert weder eine Liste noch ein Dictionary — es erzeugt einen zweiten Namen für dasselbe Objekt. Verwende a.copy() oder list(a) für eine unabhängige Kopie.
  4. Häufige Fallen: IndexError (Zugriff über Listenlänge hinaus), KeyError (Zugriff auf fehlenden Dict-Key — verwende .get()), Off-by-One-Fehler durch 0-basierte Indizierung.
  5. JSON — das Format für Web-APIs und KI-Dienste — bildet direkt auf Python-Dictionaries und -Listen ab. Wer diese beiden Typen versteht, versteht die Struktur realer Daten.

Quiz: Listen und Dictionaries

Frage 1 / 4
Noch offen

Was gibt farben[1] zurück, wenn farben = ["rot", "grün", "blau"]?

Wählen Sie eine Antwort
Auflösung: 1) B · 2) C · 3) B · 4) B

Checkpoint: Verstehst du Listen und Dictionaries?

  • Du hast die Liste farben = ["rot", "grün", "blau"]. Was gibt farben[1] zurück? Und was passiert bei farben[5]?
  • Du hast person = {"name": "Anna"}. Was ist der Unterschied zwischen person["hobby"] und person.get("hobby", "unbekannt")?
  • Du schreibst b = a und änderst danach b. Warum ändert sich a mit? Wie verhinderst du das?