Dictionaries


Dictionaries

Dictionaries, zu Deutsch etwa Wörterbücher sind eine Datenstruktur, die es in 'neueren' Programmiersprachen gibt: in Java nennt man sie Hashtabellen, in Perl heißen sie assoziative Arrays oder kurz Hashes. Wir schauen uns ein Beispiel an:

dici = { "Listen": "geordnete Folge von Elementen",
         "Walter": "walter.spiegel@web.de",
         "Riedschule": 31058,
         "print" :[3,7,17]}

Das Wörterbuch besteht aus vier Einträgen, jeder Eintrag hat einen Schlüssel und einen Wert. So hat beispielsweise der dritte Eintrag "Riedschule" den Wert 31058. Als Werte kommen in Frage:

Auf den Wert wird über den Schlüssel zugegriffen:

dici["Listen"]

Ergebnis: geordnete Folge von Elementen

Wichtig: Im Gegensatz zu Listen sind Dictionaries nicht geordnet! Näheres hierzu siehe im Beispielprogramm dict_demo.py. Für den Zugriff auf Dictionaries gibt es Methoden, die über alle Elemente des Dictionaries laufen:

Im Unterschied hierzu liefert die Methode has_key("riedschule") 0 (=Nein) oder 1 (=Ja) zurück, je nachdem, ob der Schlüssel im Wörterbuch enthalten ist oder nicht. Da riedschule dort nicht als Schlüssel steht (es kommt nur Riedschule vor!), wird die 0 (Zahl Null) zurückgegeben.

Beachte: Die Methoden werden folgendermaßen aufgerufen: dici.has_key("riedschule")
Das Beispielprogramm der Woche zählt die Häufigkeit von Wörten in einer Datei, ein Testlauf:

Lese die Datei: china.txt
ist: 1
Polizei: 1
mit: 2
was: 2
das: 1
ja: 1
dem: 2
und: 1
denn: 1
Kontrabaß: 2
Drei: 2
sich: 1
kam: 1
erzahlten: 1
Straße: 1
saßen: 1
der: 1
die: 2
auf: 1
Chinesen: 2
da: 1

Hier das Programm wort_zaehler.py, diesmal mit Zeilenziffern am Anfang:

15   # Hauptprogramm:
16   pfad = "g:/python/prg/"
17   dateiname="china.txt"
18   print '\n\nDer offizielle Python-Wort-Zaehler'
19   print 'Lese die Datei: ' + dateiname
20   text = datei_lesen(pfad+dateiname)
21   textliste = split(text) # text in liste
22   neud = {}               # das Woerterbuch
23   for wort in textliste:
24       # Zeichen am Ende eines Wortes rauswerfen
25       if wort[len(wort)-1] in [',','!','.','?',':']:
26           wort = wort[:len(wort)-1]
27       #falls das '#'-Zeichen (bzw.' oder ")
28       #am Anfang eines Wortes 'klebt', entfernen
29       if len(wort) > 1 and wort[0] in ['#','"',"'"]:
30           wort = wort[1:len(wort)]
31       if not (neud.has_key(wort)):
32           neud[wort] = 1  # neuen Eintrag hinzufugen
33       else:
34           neud[wort] = neud[wort] + 1 # Haufigkeit erhohen
35   # und ausgeben . . .
36   eintraege = neud.items()    # Woerterbuch in Liste
37   for eintrag in eintraege:
38       print eintrag[0] + ':',eintrag[1]
39   print '\nFertig . . . (wort_zaehler.py)'

Die Zeilen 1 bis 15 haben wir uns erspart, einige Erklärungen zu diesem Programm:


Beispiele

findest du unter dem Link Beispiele:


Aufgaben

  1. Probiere das Programm dict_demo.py aus.
  2. Schreibe ein Programm schluessel.py, das ein Python-Programm einliest, und die Häufigkeit der Python-Schlüsselworte zurückgibt. Denke an dein Programm woerter2.py vom letzten Mal. Eine Liste (genauer: einen String!) aller Python-Schlüsselworte findest du im Programm tkschluesselworte.py.

→ sp, , 2016-12-09