1

我有一本普通的字典,例如:

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

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

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或在 lambda 函数(或 via 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 回答