next up previous contents index 6163656769
Next: 2.6 Dateien Up: 2. Datenobjekte Previous: 2.4 Tupel   Contents   Index


2.5 Dictionaries

Dictionaries entsprechen nun Listen, die quasi ungeordnet sind. Statt über einen Index wird auf einzelne Teile des Dictionaries über Schlüsselobjekte zugegriffen. Dictionaries werden in Mengenklammern eingeschlossen, denn wie bei einer mathematischen Menge ist die Reihenfolge egal, da es Schlüsselobjekte gibt. Ein Beispiel, das Sie unbedingt ausprobieren sollten:

>>>lexikon={'eins': [1,2], 2: ('8',9)}

>>>lexikon['eins']

[1,2]

>>>lexikon[2]

('8',9)

>>>

Links vom Trenner »:« steht das Schlüsselobjekt und rechts das diesem Schlüssel zugeordnete Objekt. Sehr wichtig ist der Hinweis, dass links neben dem Trenner : ein Objekt oder eine Name stehen muss, der auf ein Objekt zeigt. Der Trenner : bedeutet keine Zuweisung. Der Aufruf lexikon[2] funktioniert also nur deswegen, weil 2 ein Objekt ist. Fügen Sie in der ersten Zeile im Dictionary noch den Eintrag null: 0 hinzu, so dass also

>>>lexikon={'eins': [1,2], 2: ('8',9),null=0}
eingegeben wird, so erhalten Sie eine Fehlermeldung, da null nicht auf das Objekt 0, sondern ins Leere zeigt.

Während in Listen den einzelnen Objekten, die die Listenkomponenten darstellen, ein Name, nämlich listename[i] , zugewiesen wird, ist dies bei den Dictionaries anders. Das Dictionary stellt keine Zuordnung zwischen Namen und Objekten, sondern zwischen Objekten und Objekten her. Sie »bilden« also Objekte auf andere Objekte ab. Daher werden Dictionaries auch als Abbildungen bezeichnet.

Es dürfen auch Namen Schlüssel sein, sofern sie auf ein Objekt zeigen. Geben Sie bitte ein:

>>>anna=2

>>>lexikon={'eins': [1,2], anna: ('8',9)}

>>>lexikon[anna]

('8',9)

>>>

Der Aufruf lexikon[anna] funktioniert also, da anna vorher einem Objekt zugeordnet wurde. Wäre die Anweisung anna=2 vorher nicht erfolgt, würde der Name anna im Dictionary ins Leere zeigen würde und es gäbe eine Fehlermeldung.

Genauso wie Listen, sind Dictionaries an Ort und Stelle veränderlich!

Figure: Dictionaries im Vergleich mit Strings, Listen und Tupel
\includegraphics[%
scale=0.5]{string.eps}

In der Abbildung [*] werden noch einmal Dictionaries mit Strings, Listen und Tupeln verglichen. Oben in dieser Abbildung sehen wir einen String, auf den wir zwar durch Indizierung stringname[i] zugreifen können. Es ist aber nicht möglich, den Inhalt der Stelle mit der Nummer i zu verändern. Um sich zu merken, dass die Indizierung stets bei $0$ und nicht bei $ 1$ beginnt, denken Sie sich an Stelle der einzelnen Stellen die Schnitte zwischen den Stellen numeriert. Die Stelle rechts von dem Schnitt ist dann diejenige, die zu der jeweiligen Nummer gehört.

Ein Tupel und eine Liste unterscheiden sich vom String dadurch, dass sie verschiedene Objekte als Inhalt haben können. Dabei können die Objekte sehr wohl durch ihre Namen ersetzt werden, wenn ihnen denn solche zugeordnet sind. Ein Tupel ist dabei wieder ein unveränderliches Gebilde, während bei einer Liste die Inhalte der einzelnen Stellen ausgetauscht werden können. Die Liste selbst kann sogar schrumpfen und wachsen.

Wie nun ein Dictionary arbeitet sehen Sie rechts. Hier werden Objekte anderen Objekten zugeordnet, aber nicht zugewiesen. Ein Aufruf eine Schlüsselobjektes (Objekt, von dem der Pfeil ausgeht) geschieht durch dictionaryname[schluesselobjekt]. Ausgegeben wird dann das Objekt, dem schluesselobjekt zugewiesen wurde. Sie sehen, dass durch diese Zuordnung keine auf eine »Reihenfolge« verzichtet werden kann. Werden als Schlüsselobjekte ausschliesslich Zahlen verwendet, so ersetzt das Dictionary quasi eine Liste. Auf diese Weise lassen sich Listen realisieren, deren Indizierung z.B. nur durch gerade Zahlen erfolgen soll, während Indizierungen durch ungerade Zahlen aus irgendwelchen Gründen nicht vorkommen sollen. Ein Dictionary ist also eine noch flexiblere »Liste« als die Liste selbst.


next up previous contents index 6163656769
Next: 2.6 Dateien Up: 2. Datenobjekte Previous: 2.4 Tupel   Contents   Index
Heiko Schroeder 2003-03-19