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 zweimalreplace(...)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, liefertgetden Standardwert0, 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.