Найти в Дзене

Как найти элемент словаря с максимальным значением?

Этот вопрос любят задавать на собеседованиях по #Python. И пусть концептуально он звучит сомнительно, ведь такая структура данных как словарь предназначена в первую очередь для быстрого поиска значения по ключу, тем не менее Питон предлагает элегантное решение этой задачи. Продемонстрировав его, вы покажете себя настоящим матёрым питонистой и увеличите свои шансы на получение оффера. И если интуиция уже подсказывает вам использовать функцию max(), самое время её послушать. Если просто передать словарь аргументом в max(), она будет искать элемент с максимальным ключом. Не совсем то, что там нужно, но по крайней мере близко. Теперь идём в документацию и подробно читаем описание функции: Return the largest item in an iterable or the largest of two or more arguments. If one positional argument is provided, it should be an iterable. The largest item in the iterable is returned. If two or more positional arguments are provided, the largest of the positional arguments is returned There are

Этот вопрос любят задавать на собеседованиях по #Python. И пусть концептуально он звучит сомнительно, ведь такая структура данных как словарь предназначена в первую очередь для быстрого поиска значения по ключу, тем не менее Питон предлагает элегантное решение этой задачи. Продемонстрировав его, вы покажете себя настоящим матёрым питонистой и увеличите свои шансы на получение оффера.

И если интуиция уже подсказывает вам использовать функцию max(), самое время её послушать. Если просто передать словарь аргументом в max(), она будет искать элемент с максимальным ключом. Не совсем то, что там нужно, но по крайней мере близко. Теперь идём в документацию и подробно читаем описание функции:

Return the largest item in an iterable or the largest of two or more arguments.
If one positional argument is provided, it should be an iterable. The largest item in the iterable is returned. If two or more positional arguments are provided, the largest of the positional arguments is returned
There are two optional keyword-only arguments. The key argument specifies a one-argument ordering function like that used for list.sort()

Таким образом, max() принимает именованный параметр key, функцию, которая должна возвращать ключ сортировки. Именно по нему max() будет искать наибольший элемент.

Таким образом, нам нужна функция, принимающая ключ и возвращающая значение по ключу. Но ведь именно это и делает метод get() у словаря! Передадим его в качестве аргумента key и вуаля:

Важно отметить, что вернёт функция всё равно ключ, поэтому если на выходе вам нужно значение, следует обратиться к нему по полученному ключу.

Этот метод конечно же работает работает не только со словарями, но у словарей решени выглядит лаконичнее из-за наличия готовой функции для передачи в аргумент key. В других случаях придётся писать свою функцию или лямбда-выражение.

Например, так может выглядеть решение задачи "имея список пар, вернуть пару с максимальным вторым значением":

Аналогичный подход работает также для функции min() и сортировки.