私は次の辞書を持っています:
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}
}
それぞれのネストされたディクショナリで「rate」値が最も高いディクショナリを含むキーの順に、含まれているディクショナリ(キーloan1からloan6)を繰り返し処理したいと思います。つまり、loan3、loan4、loan1、loan2、loan6、loan5の順に繰り返します。
@Jame Sharpのおかげで、私が知っているこれを行う最も簡単な方法は次のとおりです。
for k,v in sorted(student_loan_portfolio.items(), key=lambda (k,v): v['rate'], reverse=True):
私は今ラムダについて読んでいますが、これがどのように、そしてなぜ機能するのかを正確に理解することはできません。まず、v['rate']はそれらの辞書キーの値を返していると思います。しかし、それはある種の構文エラーであるはずのようです。v ['rate']参照とは何ですか?構文の背後にあるロジックは何ですか?
関連する注意点として、ラムダ関数への入力をタプルとして指定する必要があるのはなぜですか?
そして、次の場合はどのように異なりますか?
#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)
ご説明ありがとうございます。