Hallo,
--------------------------------------------------------------------------------------------------------------------
for key, value in sorted(d.items(), key=lambda x: x[1], reverse=True):
--------------------------------------------------------------------------------------------------------------------
Im dict "d" wurden Worthäufigkeiten nach den Wörtern(key) mit deren
Vorkommen(Value) sortiert.
Durch die lambda-Funktion erfolgt nun die Sortierung nach den
Worthäufigkeiten(Value) und nicht mehr nach den Wörtern.
Das ganze funktioniert gut.
Ich kann mir aber keine Vorstellung davon machen, in welchen Schritten
die lambda-Funktion das erreicht.
Kann mir jemand den Ablauf(Schritte) zeigen?
Gruß
Werner
Wie arbeitet die "lambda"-Funktion?
Warum verwendest Du für die Worthäufigkeit nicht collections.Counter? Das ist deutlich klarer und einfacher, als sich da selbst was zusammenzustricken.
Was liefert d.items()? Was wird also an lambda x: x[1] als `x` übergeben und was ist dann x[1]?
Was liefert d.items()? Was wird also an lambda x: x[1] als `x` übergeben und was ist dann x[1]?
@werhei14: Wenn es nur um die Lambda-Funktion geht: Die arbeitet genau so wie eine „normale“ Funktion. Ein
ist genau das gleiche wie ein
Entweder beantwortet das also deine Frage oder dein Verständnisproblem hat nichts mit `lambda` zu tun, sondern mit `sorted` und der `items`-Methode, die du aufrufst.
Code: Alles auswählen
f = lambda x: x[1]
Code: Alles auswählen
def f(x):
return x[1]
Die Lambda Funktion gibt da stumpf für jedes Element X den Wert am Index 1 zurück, hier also beim Schlüssel-Wert-Paar den Wert. Mehr macht die nicht. Die sorted() Funktion nimmt hierdurch halt die Werte als Grundlage und nicht die Schlüssel. Du scheinst da ein bisschen zu viel in Lambda zu interpretieren.
- __blackjack__
- User
- Beiträge: 14078
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Vielleicht noch als Anmerkung: Eventuell wäre es sinnvoll das die Funktion mehr macht, denn wenn Worte gleich häufig vorkommen ist im Moment nicht (sinnvoll) festgelegt wie diese sortiert werden. Da hätte man dann vielleicht gerne alphabetisch, statt dass das an der Reihenfolge hängt in der die Worte in `d` (sehr schlechter Name!) eingefügt/aktualisiert wurden. Falls `d` überhaupt ein `dict` ist und nicht noch mal ganz andere Regeln für die Reihenfolge von `items()` gelten).
Und ein Hinweis auf `operator.itemgetter()`. Also:
Und ein Hinweis auf `operator.itemgetter()`. Also:
Code: Alles auswählen
#!/usr/bin/env python3
from operator import itemgetter
def main():
...
for word, count in sorted(
word_to_count.items(), key=itemgetter(1, 0), reverse=True
):
...
if __name__ == "__main__":
main()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari