Python Lernhandbuch

Kapitel 4: Listen, Tupel, Dictionaries und Mengen

Musterlösung mit Erklärung

Deine Lösung hat die Prüfung noch nicht bestanden. Lies die Erklärung, dann versuche es erneut – möglichst ohne abzuschreiben.
Aufgabe noch einmal lesen

Gegeben ist ein Text. Zähle, wie oft jedes Wort vorkommt (Groß- und Kleinschreibung egal, Satzzeichen . und , ignorieren) und gib die drei häufigsten Wörter mit Anzahl aus.

python
text = 'Das Haus ist groß. Das Auto ist klein, das Haus ist alt.'

Erwartete Ausgabe (die Reihenfolge bei gleicher Anzahl kann abweichen):

text
das 3
ist 3
haus 2
python
text = 'Das Haus ist groß. Das Auto ist klein, das Haus ist alt.'

sauber = text.lower().replace('.', '').replace(',', '')
woerter = sauber.split()

anzahl = {}
for wort in woerter:
    anzahl[wort] = anzahl.get(wort, 0) + 1

haeufigste = sorted(anzahl.items(), key=lambda paar: paar[1], reverse=True)

for wort, n in haeufigste[:3]:
    print(wort, n)

Was passiert:

  • lower() und zweimal replace(...) bereinigen den Text. split() ohne Parameter zerlegt an beliebigem Leerraum und liefert eine Liste von Wörtern.
  • anzahl.get(wort, 0) + 1: Ist das Wort neu, liefert get den Standardwert 0, sonst die bisherige Anzahl. So braucht man keine Fallunterscheidung.
  • anzahl.items() liefert Paare (wort, n). sorted(..., key=..., reverse=True) sortiert absteigend nach dem zweiten Element jedes Paars.
  • lambda paar: paar[1] ist eine kleine namenlose Funktion (Kapitel 6), die aus jedem Paar die Anzahl herausgreift.
  • haeufigste[:3] schneidet die ersten drei Elemente heraus.

Warum so: Ein Dictionary als Zähler ist das Standardmuster. In Kapitel 9 lernst du collections.Counter, das dieselbe Aufgabe in einer Zeile löst (Counter(woerter).most_common(3)). Es lohnt sich trotzdem, die lange Variante einmal selbst zu schreiben.