Метод dict.get()
Задача: Найдите три ключа с самыми высокими значениями в словаре
my_dict = {'a': 500, 'b': 5874, 'c': 560, 'd': 400, 'e': 5874, 'f': 20}
result = sorted(my_dict, key=my_dict.get, reverse=True)[:3]
print(result)
Есть вот такая простая программа, вопрос состоит в том, что происходит когда мы выводим my_dict.get,а именно метод .get без скобок, ведь должно же быть key = my_dict.get(). Но если использовать скобки то результат получается не тот, который нужен
Ответы (1 шт):
Автор решения: Стас
→ Ссылка
Ответ
- Параметр key принимает ссылку на функцию/метод, который должен применяться к элементу сортируемой коллекции перед его сравнением с другими элементами. Поэтому и скобок нет. Если бы они были, то метод вызывался бы сразу же, а его результат (вместо ссылки на метод) бы передавался как параметр key.
Объяснение
- Внимание, приведенное ниже описание является лишь описанием общего принципа работы. Фактическая реализация может отличаться. Функция, переданная параметром key, применяется к каждому элементу сортируемой коллекции. Потом производится сортировка преобразованной коллекции (составленной из результатов key). Во время сортировки новой коллекции, элементы старой перемещаются синхронно и, в итоге, оказываются отсортированы.
P.S.
Вы можете сохранять ссылки на функции/методы в переменных и вызывать их оттуда.
Например, код
func = int
func("10")
преобразует число точно так же, как и функция int