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",
         "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:


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, , 2023-07-25