A Byte of Python

Dictionaries

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.

Benutzung von Dictionaries

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']
				
				

Ausgabe

				
$ 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
				
				

So funktioniert es

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).