字典python中的第二个最大值

Ale*_*dro 1 python dictionary

我有一个常规词典,如:

A = {37:4783, 92:47834, 12:234234,....}
Run Code Online (Sandbox Code Playgroud)

我需要返回第二个最大值,第三个,依此类推.我正在尝试:

max(A, key=lambda x: x[1])
Run Code Online (Sandbox Code Playgroud)

但是我收到了这个错误:TypeError:'float'对象是unsubscriptable

我究竟做错了什么?

谢谢

phi*_*hag 7

它看起来并不像钥匙是相关的.因此,您可以致电sorted:

>>> A = {37:4783, 92:47834, 12:234234}
>>> sorted(A.values(), reverse=True)
[234234, 47834, 4783]
Run Code Online (Sandbox Code Playgroud)

你的代码

max(A, key=lambda x: x[1])
Run Code Online (Sandbox Code Playgroud)

失败,因为迭代字典将产生其键.因此,你基本上是在打电话

max([37, 92, 12], key=lambda x:x[1])
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,关键在这里没有任何意义; 37[1]会抛出错误.如果要按相应的值对键进行排序,可以对字典进行排序items或检索lambda函数(或通过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]
Run Code Online (Sandbox Code Playgroud)

请注意,后者可能较慢,因为您需要从字典中检索每个键(尽管Python中的字典访问速度非常快).