Ein Dictionary (Wörterbuch) ist wie ein Adressbuch, in dem man die Adressen oder Kontaktangaben zu einer Person finden kann, wenn man ihren Namen kennt, d.h. wir ordnen Schlüssel (Namen) Werte (Kontaktdaten) zu. Beachten Sie, dass der Schlüssel eindeutig sein muss, genau wie man auch nicht die korrekte Information herausfinden kann, wenn man zwei Personen des exakt gleichen Namens in seinem Adressbuch hat.
Beachten Sie, dass man nur unveränderliche Objekte (wie Strings) als Schlüssel eines Dictionaries verwenden kann, aber dass man sowohl unveränderliche als auch veränderliche Objekte als Werte des Dictionaries benutzen darf. Das bedeutet im Wesentlichen, dass man nur einfache Objekte als Schlüssel verwenden sollte.
Paare von Schlüsseln und Werten werden in einem Dictionary mittels der Schreibweise
d = { schluessel1 : wert1, schluessel2 : wert2 }
angegeben.
Beachten Sie, dass die Schlüssel/Wert-Paare mit Doppelpunkte getrennt werden
und die Paare selbst durch Kommas voneinander getrennt werden, und alles insgesamt
in ein paar geschweifter Klammern eingeschlossen wird.
Denken Sie daran, dass Schlüssel/Wert-Paare in einem Dictionary in keiner Weise sortiert sind. Wenn Sie eine bestimmte Reihenfolge wünschen, dann müssen Sie diese vor Gebrauch durch Sortierung der Schlüssel selbst herstellen.
Die Dictionaries, die Sie benutzen werden, sind Instanzen/Objekte
der Klasse dict
.
Beispiel 9.4. Benutzung von Dictionaries (dict.py)
#!/usr/bin/python # 'ab' steht kurz fuer 'A'dress'b'uch ab = { 'Swaroop' : 'swaroopch@byteofpython.info', 'Larry' : 'larry@wall.org', 'Matsumoto' : 'matz@ruby-lang.org', 'Spammer' : 'spammer@hotmail.com' } print "Swaroops Adresse ist %s" % ab['Swaroop'] # Ein Schluessel/Wert-Paar hinzufuegen ab['Guido'] = 'guido@python.org' # Ein Schluessel/Wert-Paar loeschen del ab['Spammer'] print '\nEs gibt %d Kontakte im Adressbuch\n' % len(ab) for name, adresse in ab.items(): print '%s hat die Adresse %s' % (name, adresse) if 'Guido' in ab: # oder: ab.has_key('Guido') print "\nGuidos Adresse ist %s" % ab['Guido']
$ python dict.py Swaroops Adresse ist swaroopch@byteofpython.info Es gibt 4 Kontakte im Adressbuch Swaroop hat die Adresse swaroopch@byteofpython.info Matsumoto hat die Adresse matz@ruby-lang.org Larry hat die Adresse larry@wall.org Guido hat die Adresse guido@python.org Guidos Adresse ist guido@python.org
Wir haben unter Benutzung der bereits erläuterten Schreibweise
ein Dictionary ab
erzeugt. Wir greifen dann
auf die Schlüssel/Wert-Paare zu, indem wir den Schlüssel mittels
des Indizierungsoperators angeben, den wir im Zusammenhang mit
Listen und Tupeln erörtert haben. Beachten Sie, dass die
Schreibweise für Dictionaries damit ebenfalls sehr einfach ist.
Wir können neue Schlüssel/Wert-Paare hinzufügen, indem wir einfach den Indizierungsoperator verwenden, um auf einen Schlüssel zuzugreifen und den Wert zuzuweisen, so wie wir es für 'Guido' im obigen Fall getan haben.
Wir können Schlüssel/Wert-Paare löschen, indem wir unseren alten Freund
benutzen - die del
-Anweisung. Wir geben einfach das
Dictionary und den Indizierungsoperator für den zu entfernenden Schlüssel
an und übergeben es an die del
-Anweisung. Man braucht
für diese Operation nicht den Wert zu kennen, der diesem Schlüssel entspricht.
Als Nächstes greifen wir auf alle Schlüssel/Wert-Paare des Dictionaries zu,
indem wir die items
-Methode des Dictionaries verwenden,
die eine Liste von Tupeln zurückgibt, bei der jedes Tupel ein Paar von Objekten
enthält - den Schlüssel, gefolgt von seinem zugehörigen Wert. Wir ermitteln dieses
Paar und weisen es den Variablen name
bzw. adresse
zu, und zwar mittels der for..in
-Schleife für jedes vorhandene
Schlüssel/Wert-Paar im Dictionary, und geben diese Werte dann im for-Block aus.
Wir können den in
-Operator oder auch die Methode
has_key
der Klasse dict
verwenden, um zu überprüfen, ob ein bestimmter Schlüssel im Dictionary
einen Wert zugeordnet hat. Sie können sich die Dokumentation für die
vollständige Liste von Methoden der Klasse dict
mittels help(dict)
anzeigen lassen.
Schlüsselwort-Argumente und Dictionaries. Nebenbei bemerkt haben Sie bereits Dictionaries verwendet, wenn Sie in Ihren Funktionen Schlüsselwort-Argumente benutzt haben! Denken Sie einmal darüber nach - jedes Schlüssel/Wert-Paar wurde von Ihnen in der Parameterliste der Funktionsdefinition angegeben, und wenn Sie auf Variablen innerhalb der Funktion zugreifen, ist dies nur ein Schlüsselzugriff auf ein Dictionary (das in der Sprache der Compilerbauer die Symbol-Tabelle genannt wird).