Mam następujący słownik:funkcja lambda w sortowych słowniku listowego
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}
}
Chciałbym iterację zawierającego słowniku (z kluczami loan1 przez loan6) w celu klucza zawierającego słownik z najwyższą Wartość "rate" w odpowiednim zagnieżdżonym słowniku. Oznacza to, że chciałbym iteracyjne w kolejności loan3, loan4, loan1, loan2, loan6, loan5
Dzięki @Jame Sharpa najprostszym sposobem na to, że wiem, że zrobić to:
for k,v in sorted(student_loan_portfolio.items(), key=lambda (k,v): v['rate'], reverse=True):
I teraz czytam o lambdzie i nie mogę dokładnie zrozumieć, jak i dlaczego to działa. Po pierwsze, v ['rate'] Wierzę, że zwraca wartość tych kluczy słownika. Ale wydaje się, że powinien to być jakiś błąd składniowy. czym jest odniesienie v ['rate'] i jaka jest logika stojąca za składnią?
W powiązanej uwadze, dlaczego, musimy określić dane wejściowe do funkcji lambda jako krotki?
A jakie są następujące przypadki?
#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)
Dziękuję za wyjaśnienia.
Druga oczekuje spakowanego wejścia z 3 wartościami? 'f ((1,2,3))' –