次のような通常の辞書があります。
A = {37:4783, 92:47834, 12:234234,....}
2 番目の最大値、3 番目などを返す必要があります。私は試していました:
max(A, key=lambda x: x[1])
しかし、私はこのエラーを受け取りました: TypeError: 'float' object is unsubscriptable
私は何を間違っていますか?
ありがとう
次のような通常の辞書があります。
A = {37:4783, 92:47834, 12:234234,....}
2 番目の最大値、3 番目などを返す必要があります。私は試していました:
max(A, key=lambda x: x[1])
しかし、私はこのエラーを受け取りました: TypeError: 'float' object is unsubscriptable
私は何を間違っていますか?
ありがとう
キーがまったく関連していないようです。したがって、あなたはただ呼び出すことができますsorted
:
>>> A = {37:4783, 92:47834, 12:234234}
>>> sorted(A.values(), reverse=True)
[234234, 47834, 4783]
あなたのコード
max(A, key=lambda x: x[1])
辞書を反復処理するとキーが生成されるため、失敗します。したがって、あなたは本質的に呼び出しています
max([37, 92, 12], key=lambda x:x[1])
ご覧のとおり、ここではキーは意味がありません。37[1]
エラーがスローされます。対応する値でキーを並べ替える場合は、ディクショナリを並べ替えるかitems
、ラムダ関数で(またはを介してdict.get
)値を取得します。
>>> [k for k,v in sorted(A.items(), key=lambda item: item[1], reverse=True)]
[12, 37, 92]
>>> sorted(A, key=lambda k: A[k], reverse=True)
[12, 37, 92]
>>> sorted(A, key=A.get, reverse=True)
[12, 37, 92]
辞書からすべてのキーを取得する必要があるため、後者の方が遅くなる可能性があることに注意してください(ただし、Pythonでは辞書へのアクセスは非常に高速です)。