Dictionaries und Maps

Was sind Dictionaries/Maps und wie funktionieren sie?

Das Grundprinzip: Schlüssel weisen den Weg zum Wert

Stell dir ein klassisches Wörterbuch vor: Du schlägst ein bestimmtes Wort (den Schlüssel) nach und findest direkt daneben seine Definition (den Wert). Genau nach diesem Prinzip funktionieren Dictionaries (häufig in Python so genannt) oder Maps (ein gängiger Begriff in Sprachen wie Java oder JavaScript). Es sind spezielle Datenstrukturen, die dazu dienen, eine Sammlung von Schlüssel-Wert-Paaren (Englisch: key-value pairs) zu speichern. Jeder Schlüssel in einem Dictionary muss einzigartig sein und dient als eindeutiger Bezeichner, um den zugehörigen Wert schnell und effizient wiederzufinden. Anders als bei Listen oder Arrays, wo du Elemente über ihre numerische Position (ihren Index, z.B. das 0., 1., 2. Element) ansprichst, greifst du bei Dictionaries über einen oft aussagekräftigen, selbstgewählten Schlüssel auf den dazugehörigen Wert zu.

Ein einfaches Beispiel in Python:

# Ein Dictionary, das Hauptstädte ihren Ländern zuordnet
hauptstaedte = {
    "Deutschland": "Berlin",
    "Frankreich": "Paris",
    "Italien": "Rom"
}

# Zugriff auf den Wert über den Schlüssel
print(hauptstaedte["Frankreich"]) # Ausgabe: Paris

Die Magie dahinter: Schneller Zugriff dank Hashing

Wie schaffen es Dictionaries, Werte so unglaublich schnell zu finden, selbst wenn sie Tausende oder Millionen von Einträgen enthalten? Das Geheimnis liegt im Hashing. Wenn du ein neues Schlüssel-Wert-Paar hinzufügst, wird der Schlüssel intern durch eine spezielle Funktion, die Hash-Funktion, geschickt. Diese Funktion berechnet aus dem Schlüssel einen (idealerweise) eindeutigen Zahlenwert, den sogenannten Hash-Wert. Dieser Hash-Wert wird dann verwendet, um den Speicherort des zugehörigen Wertes sehr schnell zu bestimmen oder direkt darauf zu verweisen. Das Geniale daran ist: Im Durchschnitt dauert das Suchen, Einfügen oder Löschen eines Elements in einem Dictionary immer ungefähr gleich lang, egal wie viele Elemente bereits darin gespeichert sind. Man spricht hier von einer durchschnittlichen Zeitkomplexität von O(1) (konstante Zeit). Das ist so, als hättest du einen riesigen Karteikasten, bei dem jeder Schlüssel dich ohne Umwege direkt zur richtigen Karte führt, anstatt alle Karten einzeln durchblättern zu müssen (was bei einer einfachen Liste der Fall wäre, mit einer Komplexität von O(n)).

Wie werden Dictionaries und Maps in der Praxis eingesetzt?

Daten verwalten: Typische Operationen im Überblick

Mit Dictionaries kannst du deine Daten effizient organisieren und bearbeiten. Die grundlegendsten Operationen sind:

  • Einfügen eines neuen Schlüssel-Wert-Paares:
# Ein leeres Dictionary für ein Telefonbuch erstellen
telefonbuch = {}

# Einträge (Schlüssel-Wert-Paare) hinzufügen
telefonbuch["Anna Schmitt"] = "0170-1122334" # Schlüssel: "Anna Schmitt", Wert: "0170-1122334"
telefonbuch["Ben Weber"] = "0160-5566778"
print(telefonbuch)
# Ausgabe: {'Anna Schmitt': '0170-1122334', 'Ben Weber': '0160-5566778'}
  • Suchen/Abrufen eines Wertes anhand des Schlüssels:
# Wert für den Schlüssel "Anna Schmitt" abrufen
annas_nummer = telefonbuch["Anna Schmitt"]
print(f"Annas Nummer ist: {annas_nummer}")
# Ausgabe: Annas Nummer ist: 0170-1122334

# Sicherer Zugriff: Prüfen, ob ein Schlüssel existiert, bevor man zugreift, um Fehler zu vermeiden
if "Carl Meier" in telefonbuch:
    print(f"Carls Nummer: {telefonbuch['Carl Meier']}")
else:
    print("Carl Meier ist nicht im Telefonbuch.")
# Ausgabe: Carl Meier ist nicht im Telefonbuch.
  • Ändern des Wertes eines vorhandenen Schlüssels: Wenn der Schlüssel noch nicht existiert, wird er bei dieser Zuweisung oft neu angelegt.
telefonbuch["Anna Schmitt"] = "0170-9988776" # Annas Nummer hat sich geändert
print(telefonbuch["Anna Schmitt"]) 
# Ausgabe: 0170-9988776
  • Löschen eines Schlüssel-Wert-Paares:
del telefonbuch["Ben Weber"]
print(telefonbuch) 
# Ausgabe: {'Anna Schmitt': '0170-9988776'}

Einsatzgebiete: Wann sind Dictionaries/Maps die beste Wahl?

Dictionaries sind extrem vielseitig und oft die deutlich bessere Wahl gegenüber Listen oder Arrays, wenn es auf einen schnellen Zugriff über einen eindeutigen Bezeichner (den Schlüssel) ankommt und die Reihenfolge der Elemente keine oder eine untergeordnete Rolle spielt:

  • Konfigurationsdaten speichern: Einstellungen für eine Anwendung lassen sich übersichtlich als Schlüssel-Wert-Paare ablegen. Zum Beispiel: einstellungen = {"theme": "dark", "fontSize": 12, "showToolbar": True}. Hier kannst du direkt auf einstellungen["theme"] zugreifen, anstatt eine Liste nach dem Eintrag "theme" durchsuchen zu müssen.
  • Häufigkeiten zählen (z.B. Wortzähler): Du möchtest wissen, wie oft jedes Wort in einem langen Text vorkommt? Ein Dictionary ist perfekt dafür: Das Wort ist der Schlüssel, die Häufigkeit der Wert.
text = "Das Haus ist rot und das Auto ist auch rot und schnell."
wort_frequenz = {}
for wort in text.lower().replace('.', '').split(): # Text in Kleinbuchstaben, Satzzeichen entfernen, in Wörter zerlegen
    if wort in wort_frequenz:
        wort_frequenz[wort] += 1 # Wenn Wort bekannt, Zähler erhöhen
    else:
        wort_frequenz[wort] = 1  # Wenn Wort neu, Zähler auf 1 setzen
print(wort_frequenz) 
# Mögliche Ausgabe: {'das': 2, 'haus': 1, 'ist': 2, 'rot': 2, 'und': 2, 'auto': 1, 'auch': 1, 'schnell': 1}
  • Schnelle Suche und eindeutige Zuordnung: Immer wenn du Daten nicht über eine Position (Index), sondern über einen eindeutigen Namen, eine ID oder ein anderes Merkmal (den Schlüssel) finden und verwalten musst, sind Dictionaries Listen oder Arrays überlegen. Sie vermeiden das potenziell langsame, sequentielle Durchsuchen der gesamten Datenstruktur, das bei Listen für eine Suche notwendig wäre.

Lernziele

  • die Implementierung von Dictionaries und Maps erklären, indem die grundlegenden Operationen (Einfügen, Suchen, Löschen) und deren durchschnittliche Zeitkomplexität (O(1) für Suchen und Einfügen) anhand von Codebeispielen in einer modernen Programmiersprache erläutert werden.
  • die Anwendungsfälle von Dictionaries und Maps vergleichen, indem die Vorteile dieser Datenstrukturen für spezifische Problemstellungen (z.B. schnelle Suche nach Werten anhand von Schlüsseln, Speicherung von Konfigurationsdaten) gegenüber anderen Datenstrukturen (z.B. Listen, Arrays) abgewogen werden.
  • das Konzept von Dictionaries und Maps als assoziative Datenstrukturen erklären, indem die grundlegenden Eigenschaften (Schlüssel-Wert-Paare, schnelle Suche durch Hashing) und die Unterschiede zu anderen Datenstrukturen (z.B. Listen, Arrays) anhand von Codebeispielen in einer modernen Programmiersprache erläutert werden.

Genug gelesen? Zeit, es wirklich zu können!

Die Theorie aus diesem Artikel ist die perfekte Basis. In der asyoube Lernplattform wendest du dieses Wissen an, bekommst persönliches Feedback und bereitest dich interaktiv auf deine Ausbildung oder deine Prüfungen vor.

Für Ausbilder & Unternehmen

Möchten Sie Ihr gesamtes Team mit asyoube ausbilden? Entdecken Sie unsere B2B-Lösung mit einfacher Verwaltung, Fortschritts-Tracking für Ihre Azubis und attraktiven Team-Preisen.