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:
neud
initialisiert textliste
manipuliert neud
gefüllt: falls das Wort noch nicht im Wörterbuch steht (Zeile 31), kommt ein neuer Eintrag in neud
hinzu (Zeile 32), Schlüssel ist das Wort, der Wert wird auf 1 festgesetzt. Ansonsten -das Wort ist schon im Wörterbuch- wird der Wert um eins erhöht (Zeile 34). print eintrag
findest du unter dem Link Beispiele:
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