0%

Kapitel 9

Dictionaries und andere Sammlungen

Jedem Wert eine Bezeichnung geben

Eine Liste eignet sich hervorragend, wenn die Position ein sinnvoller Weg ist, einen Wert zu finden. Der erste Eintrag steht an Index 0, der zweite an Index 1 und so weiter.

Umständlich wird das, wenn die Werte unterschiedliche Fakten über eine Sache beschreiben.

book = ["Kindred", "Octavia E. Butler", 1979]

Was bedeutet Position 1? Das musst du dir merken. Wer book[1] liest, muss nach der Definition der Liste suchen oder einem Kommentar vertrauen.

Du könntest die Fakten auf Variablen verteilen:

title = "Kindred"
creator = "Octavia E. Butler"
year = 1979

Für ein Buch ist das übersichtlich. Für zwanzig Bücher brauchst du zwanzig Sätze von Variablennamen.

Ein Datensatz mit Bezeichnungen

Ein Dictionary speichert Schlüssel-Wert-Paare:

book = {
    "title": "Kindred",
    "creator": "Octavia E. Butler",
    "year": 1979,
}

Jeder Schlüssel bezeichnet die Bedeutung seines Wertes:

SchlüsselWert
"title""Kindred"
"creator""Octavia E. Butler"
"year"1979

Statt nach einer Position fragst du nach einem Schlüssel:

print(book["creator"])

Die Klammern sehen aus wie bei einem Listenzugriff über den Index, aber das Nachschlagen funktioniert anders. Eine Liste beantwortet die Frage: „Was steht an Position 1?“ Ein Dictionary beantwortet die Frage: „Welcher Wert ist unter dem Schlüssel "creator" gespeichert?“

Schlüssel müssen eindeutig sein

Ein Dictionary kann viele Werte speichern, aber jeder Schlüssel kommt nur einmal vor. Wenn du einem vorhandenen Schlüssel einen anderen Wert zuweist, ändert sich dieser Eintrag:

book["year"] = 1988

Das Dictionary hat weiterhin einen einzigen Schlüssel "year". Sein Wert ist jetzt 1988.

Werte müssen nicht eindeutig sein. Zwei verschiedene Schlüssel können beide "unknown" enthalten.

Dictionaries sind veränderbar

Wie eine Liste kann sich ein Dictionary nach seiner Erstellung ändern. Du kannst:

  • ein neues Schlüssel-Wert-Paar hinzufügen;

  • den Wert eines vorhandenen Schlüssels ersetzen;

  • ein Paar entfernen;

  • seinen Inhalt lesen und in einer Schleife durchlaufen.

Dieses Kapitel konzentriert sich auf das Hinzufügen, Ändern, Lesen und Durchlaufen. Kapitel 10 greift die Fehler auf, die entstehen können, wenn ein Programm nach einem fehlenden Schlüssel fragt.

Die Informationen modellieren, nicht ihre Darstellung

Das Dictionary enthält Fakten:

book = {
    "title": "Kindred",
    "creator": "Octavia E. Butler",
    "year": 1979,
}

Eine Funktion kann entscheiden, wie sie angezeigt werden:

def book_label(book):
    return f"{book['title']} by {book['creator']}"

Diese Trennung nutzt den Funktionsentwurf aus Kapitel 8. Das Dictionary bildet den Datensatz ab. Die Funktion führt einen Vorgang damit aus.

Was gibt dieses Programm aus?

place = {
    "name": "Kyoto",
    "country": "Japan",
}

print(place["country"])

Welche Informationen lassen sich am natürlichsten als ein Dictionary abbilden?