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",
"HvGG": 5110,
"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 "HvGG" den Wert 5110. 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 (gilt bis Python 3.6; ab Python 3.7 sind Dictionaries 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:
Beachte: Die Methoden werden folgendermaßen aufgerufen: dici.item()
Im Unterschied hierzu kann ich mit in
prüfen, ob ein Schlüssel schon im Wörterbuch enthalten
ist oder nicht. Der Test hvgg in dici
liefert deshalb 0 (=Nein, FALSE), da hvgg
dort nicht als Schlüssel vorkommt (es kommt nur
HvGG
vor!). Teste ich auf HvGG in dici
, so bekomme ich den Wert 1 (=Ja, TRUE) zurück.
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
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 = "./py_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 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 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, , 2023-07-25