lambda-Funktion sortiert die Wörterbuch-Liste Verständnis

Habe ich Folgendes Wörterbuch:

student_loan_portfolio = {
    'loan1': {'rate': .078, 'balance': 1000, 'payment': 100, 'prepayment': 0},
    'loan2': {'rate': .0645, 'balance': 10, 'payment': 5, 'prepayment': 0},
    'loan3': {'rate': .0871, 'balance': 250, 'payment': 60, 'prepayment': 0},
    'loan4': {'rate': .0842, 'balance': 200, 'payment': 37, 'prepayment': 0},
    'loan5': {'rate': .054, 'balance': 409, 'payment': 49, 'prepayment': 0},
    'loan6': {'rate': .055, 'balance': 350, 'payment': 50, 'prepayment': 0}
}

Möchte ich Durchlaufen und die mit Wörterbuch (mit Schlüssel loan1 durch loan6) in der Reihenfolge der Schlüssel mit dem Wörterbuch mit der höchsten rate " - Wert in seinem jeweiligen verschachtelten dictionary. Das heißt, ich möchte zu iterieren in der Reihenfolge der loan3, loan4, loan1, loan2, loan6, loan5

Dank @Jame Scharf der einfachste Weg, dies zu tun, die ich kenne, ist:

for k,v in sorted(student_loan_portfolio.items(), key=lambda (k,v): v['rate'], reverse=True):

Ich bin jetzt beim Lesen über lambda und nicht wirklich genau verstehen, wie und warum das funktioniert.
Erstens, v['rate'] ich glaube, dass ist die Rücksendung den Wert der dictionary-Schlüssel. Aber Ihr scheint, wie es sollte eine Art syntax-Fehler. was ist v['rate'] verweisen, und was ist die Logik hinter der syntax?

Auf ein zugehöriger Hinweis, warum, müssen wir angeben, die Eingaben für die lambda-Funktion als ein Tupel?

"Und wie sind die folgenden Fälle unterscheiden?

#1

>>>f = lambda x,y,z:x + y + z
>>>f(1,2,3)

#6

>>>f = lambda (x,y,z): x + y + z
>>>f(1,2,3)

Traceback (most recent call last):
  File "<pyshell#48>", line 1, in <module>
    f(1,2,3)
TypeError: <lambda>() takes exactly 1 argument (3 given)

Danke für die Klarstellung.

  • der zweite, erwartet man ein verpackt-Eingang mit 3-Werte? f((1,2,3))
  • Zweite format nicht gültig in Python 3, FYI
InformationsquelleAutor cdelsola | 2012-12-08
Schreibe einen Kommentar