Einführung in Python-Wörterbücher
Variablen in Python können verschiedene Datentypen speichern. Zuvor haben Sie gelernt, dass Sie Zeichenfolgen und Zahlen speichern können:
name = 'Earth'
moons = 1
Diese Methode eignet sich zwar für kleinere Datenmengen, kann aber zunehmend komplexer werden, wenn Sie mit verwandten Daten arbeiten. Stellen Sie sich vor, Sie möchten Informationen über die Monde der Erde und die Monde des Jupiters speichern.
earth_name = 'Earth'
earth_moons = 1
jupiter_name = 'Jupiter'
jupiter_moons = 79
Beachten Sie, wie wir Variablen mit unterschiedlichen Präfixen dupliziert werden. Diese Verdoppelung kann unübersichtlich werden. Da Sie häufig mit zusammengehörigen Datensätzen arbeiten, z. B. mit der durchschnittlichen Niederschlagsmenge für verschiedene Monate in verschiedenen Städten, ist die Speicherung dieser Variablen als Einzelwerte keine praktikable Option. Stattdessen können Sie Python-Wörterbücher verwenden.
Mit Python-Wörterbüchern können Sie mit verwandten Datensätzen arbeiten. Ein Wörterbuch ist eine Sammlung von Schlüssel-Wert-Paaren. Stellen Sie sich dies wie eine Gruppe von Variablen in einem Container vor, wobei der Schlüssel der Name der Variablen und der Wert der darin gespeicherte Wert ist.
Erstellen eines Wörterbuchs
Python verwendet geschweifte Klammern ({ }
) und den Doppelpunkt (:
), um ein Wörterbuch zu kennzeichnen. Sie können entweder ein leeres Wörterbuch erstellen und später Werte hinzufügen oder es zum Zeitpunkt der Erstellung auffüllen. Jedes Schlüssel-Wert-Paar wird dabei durch einen Doppelpunkt getrennt, und der Name jedes Schlüssels steht als Zeichenfolgenliteral in Anführungszeichen. Da der Schlüssel ein Zeichenfolgenliteral ist, können Sie einen beliebigen geeigneten Namen verwenden, um den Wert zu beschreiben.
Erstellen wir nun ein Wörterbuch, um den Namen des Planeten Erde und die Anzahl seiner Monde zu speichern:
planet = {
'name': 'Earth',
'moons': 1
}
Sie verfügen über zwei Schlüssel: 'name'
und 'moons'
. Jeder Schlüssel verhält sich ähnlich wie eine Variable: Sie besitzen einen eindeutigen Namen und speichern einen Wert. Sie sind jedoch in einer einzelnen, größeren Variablen namens planet
enthalten.
Wie bei normalen Variablen müssen Sie sicherstellen, dass Sie die richtigen Datentypen verwenden. Bei dem moons
-Wert von 1
im vorigen Beispiel haben Sie die Zahl nicht in Anführungszeichen gesetzt, da Sie eine ganze Zahl verwenden möchten. Wenn Sie '1'
verwendet hätten, würde Python diese Variable als Zeichenfolge betrachten, was sich auf ihre Fähigkeit zum Ausführen von Berechnungen auswirken würde.
Im Gegensatz zu regulären Variablen müssen Schlüsselnamen nicht den Standardbenennungsregeln für Python folgen. Sie können in Ihrem Code aussagekräftigere Schlüsselnamen verwenden.
Lesen von Wörterbuchwerten
Sie können Werte in einem Wörterbuch lesen. Wörterbuchobjekte verfügen über eine get
-Methode, mit der Sie über seinen Schlüssel auf einen Wert zugreifen können. Wenn Sie den name
ausgeben möchten, können Sie folgenden Code verwenden:
print(planet.get('name'))
Earth
Wie Sie vielleicht schon vermuten, ist der Zugriff auf Werte in einem Wörterbuch ein gängiger Vorgang. Glücklicherweise gibt es eine „Abkürzung“. Sie können den Schlüssel auch mit der Notation in eckigen Klammern ([ ]
) übergeben. Bei dieser Methode wird weniger Code als mit get
verwendet, und die meisten Programmierer verwenden stattdessen diese Syntax. Sie könnten das vorherige Beispiel umschreiben und dazu folgenden Code verwenden:
# planet['name'] is identical to using planet.get('name')
print(planet['name'])
Earth
Obwohl das Verhalten von get
und den eckigen Klammern ([ ]
) beim Abrufen von Elementen generell identisch ist, gibt es einen wichtigen Unterschied. Wenn kein Schlüssel verfügbar ist, gibt get
None
zurück und [ ]
lösen einen KeyError
aus.
wibble = planet.get('wibble') # Returns None
wibble = planet['wibble'] # Throws KeyError
Ändern von Wörterbuchwerten
Sie können auch Werte innerhalb eines Wörterbuchobjekts ändern, indem Sie die update
-Methode verwenden. Diese Methode akzeptiert ein Wörterbuch als Parameter und aktualisiert alle vorhandenen Werte mit den neuen Werten, die Sie bereitstellen. Wenn Sie den name
-Wert für das planet
-Wörterbuch ändern möchten, können Sie beispielsweise folgenden Code verwenden:
planet.update({'name': 'Makemake'})
# No output: name is now set to Makemake.
Ähnlich wie bei der Verwendung der Abkürzung mittels eckiger Klammern ([ ]
) zum Lesen von Werten können Sie dieselbe Abkürzung verwenden, um Werte zu ändern. Der Hauptunterschied bei der Syntax besteht in der Verwendung von =
(manchmal auch als Zuweisungsoperator bezeichnet), um einen neuen Wert zur Verfügung zu stellen. Um das vorherige Beispiel umzuschreiben, damit der Name geändert wird, können Sie folgenden Code verwenden:
planet['name'] = 'Makemake'
# No output: name is now set to Makemake.
Der Hauptvorteil der Verwendung von update
ist die Möglichkeit, mehrere Werte in einem Vorgang ändern zu können. Die nächsten beiden Beispiele sind logisch identisch, aber die Syntax ist unterschiedlich. Sie können die Syntax verwenden, die Ihrer Meinung nach am besten geeignet ist. Die meisten Entwickler wählen eckige Klammern, um einzelne Werte zu aktualisieren.
Im folgenden Beispiel werden dieselben Änderungen an unserer Variablen planet
vorgenommen, indem der Name und die Monde aktualisiert werden. Beachten Sie, dass Sie mithilfe von update
einen einzelnen Aufruf der Funktion tätigen, während die Verwendung eckiger Klammern zwei Aufrufe umfasst.
Verwenden von update:
planet.update({
'name': 'Jupiter',
'moons': 79
})
Verwenden von eckigen Klammern:
planet['name'] = 'Jupiter'
planet['moons'] = 79
Hinzufügen und Entfernen von Schlüsseln
Sie müssen nicht alle Schlüssel erstellen, wenn Sie ein Wörterbuch initialisieren. Tatsächlich müssen Sie gar keine erstellen. Wenn Sie einen neuen Schlüssel erstellen möchten, weisen Sie ihn einfach so zu wie einen vorhandenen.
Angenommen, Sie möchten planet
so aktualisieren, dass die Umlaufperiode in Tagen enthalten ist:
planet['orbital period'] = 4333
# planet dictionary now contains: {
# name: 'jupiter'
# moons: 79
# orbital period: 4333
# }
Wichtig
Bei Schlüsselnamen wird, wie überall in Python, die Groß-/Kleinschreibung beachtet. Daher werden 'name'
und 'Name'
als zwei separate Schlüssel in einem Python-Wörterbuch angesehen.
Um einen Schlüssel zu entfernen, verwenden Sie pop
. pop
gibt den Wert zurück und entfernt den Schlüssel aus dem Wörterbuch. Um orbital period
zu entfernen, können Sie folgenden Code verwenden:
planet.pop('orbital period')
# planet dictionary now contains: {
# name: 'jupiter'
# moons: 79
# }
Komplexe Datentypen
Wörterbücher können jeden Typ eines Werts speichern, einschließlich anderer Wörterbücher. Auf diese Weise können Sie komplexe Daten nach Bedarf modellieren. Stellen Sie sich vor, Sie müssen den Durchmesser für planet
speichern, der am Äquator oder über die Pole gemessen werden kann. Sie können ein weiteres Wörterbuch in planet
erstellen, um diese Informationen zu speichern:
# Add address
planet['diameter (km)'] = {
'polar': 133709,
'equatorial': 142984
}
# planet dictionary now contains: {
# name: 'Jupiter'
# moons: 79
# diameter (km): {
# polar: 133709
# equatorial: 142984
# }
# }
Um Werte in einem geschachtelten Wörterbuch abzurufen, verketten Sie eckige Klammern oder rufen get
auf.
print(f'{planet["name"]} polar diameter: {planet["diameter (km)"]["polar"]}')
Jupiter polar diameter: 133709