1

次のような通常の辞書があります。

A = {37:4783, 92:47834, 12:234234,....}

2 番目の最大値、3 番目などを返す必要があります。私は試していました:

max(A, key=lambda x: x[1])

しかし、私はこのエラーを受け取りました: TypeError: 'float' object is unsubscriptable

私は何を間違っていますか?

ありがとう

4

1 に答える 1

7

キーがまったく関連していないようです。したがって、あなたはただ呼び出すことができます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では辞書へのアクセスは非常に高速です)。

于 2012-10-05T21:18:09.600 に答える