Wie arbeitet die "lambda"-Funktion?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
werhei14
User
Beiträge: 14
Registriert: Montag 10. April 2017, 20:35

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
Sirius3
User
Beiträge: 18279
Registriert: Sonntag 21. Oktober 2012, 17:20

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]?
werhei14
User
Beiträge: 14
Registriert: Montag 10. April 2017, 20:35

Ich bin nur an der Arbeitsweise der lambda-Funktion interessiert.

Gruß Werner
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Versuch doch mal die Fragen von Sirius3 für dich zu beantworten. Hoffentlich bringtbdas Klarheit.
narpfel
User
Beiträge: 691
Registriert: Freitag 20. Oktober 2017, 16:10

@werhei14: Wenn es nur um die Lambda-Funktion geht: Die arbeitet genau so wie eine „normale“ Funktion. Ein

Code: Alles auswählen

f = lambda x: x[1]
ist genau das gleiche wie ein

Code: Alles auswählen

def f(x):
    return x[1]
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.
Benutzeravatar
snafu
User
Beiträge: 6873
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

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.
Benutzeravatar
__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:

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
werhei14
User
Beiträge: 14
Registriert: Montag 10. April 2017, 20:35

wow Jungs, ihr seid klasse!
Antworten