Dictionaries |
Beispiele |
Aufgaben |
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 Worten 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 erzählten: 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-Zähler' 19 print 'Lese die Datei: ' + dateiname 20 text = datei_lesen(pfad+dateiname) 21 textliste = split(text) # text in liste 22 neud = {} # das Wörterbuch 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 hinzufügen 33 else: 34 neud[wort] = neud[wort] + 1 # Häufigkeit erhöhen 35 # und ausgeben . . . 36 eintraege = neud.items() # Wörterbuch 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 im Lehrer-Ordner rechts oben auf dem Desktop unter wspiegel u. s. w.:
*.pyw
kennzeichnet ein Tkinter-Programm unter Python. Der Python-Interpreter startet das Programm dann ohne das -sonst übliche- Konsolenfenster. Tkinter ist eine Fensterbibliothek unter Python, sie 'kapselt' die Tk-Fensterbibliothek (Tk: Toolkit) der Skriptsprache Tcl/Tk ein.
schluessel.py
, das ein Python-Programm einliest, und die Häufigkeit der Python-Schlüsselworte zurückgibt. Eine Liste (genauer: einen String!) aller Python-Schlüsselworte findest du im Programm tkschluesselworte.pyw.