Lambda-Funktion im sortierten Wörterbuch Liste Verständnis

8

Ich habe das folgende Wörterbuch:

%Vor%

Ich möchte das enthaltene Wörterbuch (mit den Schlüsseln loan1 bis loan6) in der Reihenfolge des Schlüssels durchlaufen, der das Wörterbuch mit dem höchsten Wert 'rate' in seinem jeweiligen verschachtelten Wörterbuch enthält. Das heißt, ich würde gerne in der Reihenfolge loan3, loan4, loan1, loan2, loan6, loan5

iterieren

Dank @Jame Sharp ist der einfachste Weg, dies zu tun:

%Vor%

Ich lese jetzt über Lambda und kann nicht wirklich genau verstehen, wie und warum das funktioniert. Erstens, v ['Rate'] Ich glaube, dass der Wert dieser Wörterbuchschlüssel zurückgegeben wird. Aber es scheint, als sollte es eine Art Syntaxfehler sein. Was ist v ['Rate'] Referenzierung und was ist die Logik hinter der Syntax?

Bei einer verwandten Anmerkung, warum müssen wir die Eingaben für die Lambda-Funktion als Tupel angeben?

Und wie unterscheiden sich die folgenden Fälle?

%Vor%

Danke für die Klarstellung.

    
cdelsola 08.12.2012, 21:11
quelle

2 Antworten

5

Die Methode items() für student_loan_portfolio.items() gibt eine Liste von Schlüssel / Wert-Tupeln zurück. Also gibt es etwas wie [ ('loan1', dictOfLoan1), ('loan2', dictOfLoan2), ...] zurück. Das Lambda akzeptiert dieses Tupel als ein Argument und liest den "Rate" -Eintrag aus dem Wert dict (d. H. Es liest dictOfLoan1['rate'] , dictOfLoan2['rate'] usw.).

Sie können denselben Effekt erzielen, indem Sie anstelle des Lambda% lambda item: item[1]['rate'] verwenden. item ist ein Tupel (key, value) , also item[1] ist der Wert.

Der Unterschied zwischen Ihren beiden Lambda-Beispielen besteht darin, dass der erste drei Argumente akzeptiert, während der zweite ein einzelnes Argument akzeptiert, bei dem es sich um ein Tupel mit drei Elementen handelt. Die Fähigkeit, eine Funktion zu definieren, die Tupel als Argumente akzeptiert, ihre Inhalte jedoch in separate lokale Variablen entpackt, war eine Eigenart von Python, die in Python 3 entfernt wurde (siehe PEP 3113 ).

    
BrenBarn 08.12.2012, 21:19
quelle
8

lambda (k,v): v['rate'] ist eine Funktion, die ein einzelnes Argument (ein 2-Tupel) akzeptiert und den Schlüssel 'rate' des zweiten Eintrags im Tupel zurückgibt. Dies entspricht lambda t: t[1]['rate']

lambda x,y,z:x + y + z ist eine Funktion, die 3 Werte akzeptiert und ihre Summe zurückgibt.

lambda (x,y,z): x + y + z ist eine Funktion, die 1 Wert (ein 3-Tupel) akzeptiert und die Summe ihrer Elemente zurückgibt.

    
Eric 08.12.2012 21:19
quelle