Вы получаете 'dict_values' object is not callable
, поскольку для аргумента key
в min
требуется вызываемый объект (объект, имеющий метод __call__
). В вашем случае scores.values()
возвращает объект с типом <class 'dict_values'>
, который не может быть вызван.
>>> dct = {}
>>> type(dct.values())
<class 'dict_values'>
>>> callable(dct.values())
False
Если вы хотите sh, чтобы получить ключ с минимальным значением, вы должны попробовать что-то вроде этого.
min(scores.items(), key=lambda x: x[1])[0]
Или с помощью operator.itemgetter
:
from operator import itemgetter
min(scores.items(), key=itemgetter(1))[0]
Другими словами, min
применяет функцию key
к элементам, предоставляемым scores.items()
.
Если вы попробуете scores.keys()
, как в вашем вопросе, функция min
ничего не знает о своих значениях. Хотя вы все еще можете сделать это:
min(scores.keys(), key=lambda key: scores[key])
Но я бы не рекомендовал это решение, потому что функция key
содержит scores
внутри, что в некоторых случаях может привести к неопределенному поведению.