不能将 dict.values() 与 min func 的键一起使用



我创建了一个字典:

scores = {5: 35044.51299744237, 25: 29016.41319191076, 50: 27405.930473214907, 100: 27282.50803885739, 250: 27893.822225701646, 500: 29454.18598068598} 

我可以使用以下方法将最小函数与它一起使用:

min(scores.keys(),key = lambda x: scores[x])
min(scores, key=scores.get)

但是当我尝试使用时:

min(scores.keys(),key = scores.values())

我收到一个错误:

"dict_values"对象不可调用

有人可以解释一下为什么吗?

key必须是可以使用一个参数调用的函数。values()不是一个函数,它是一个视图,字典中所有值的序列。虽然scores.values是一个函数,但它不能用参数调用。

目前还不清楚您认为您的代码段即使有效也会实际做什么。在值集中查找键究竟会做什么?

你会得到'dict_values' object is not callable,因为min中的key参数需要一个可调用的对象(具有__call__方法的对象(。在您的情况下,scores.values()返回类型为<class 'dict_values'>且不可调用的对象。

>>> dct = {}
>>> type(dct.values())
<class 'dict_values'>
>>> callable(dct.values())
False

如果您希望获得具有最小值的密钥,则应尝试类似操作。

min(scores.items(), key=lambda x: x[1])[0]

或与operator.itemgetter

from operator import itemgetter
min(scores.items(), key=itemgetter(1))[0]

换句话说,minkey函数应用于scores.items()提供的元素。

如果你尝试scores.keys(),就像你的问题一样,min函数对其值一无所知。虽然你仍然可以这样做:

min(scores.keys(), key=lambda key: scores[key])

但我不推荐这个解决方案,因为key函数包含scores在某些情况下可能导致未定义的行为。

最新更新