← Все вопросы

Зачем нужен key= в sorted и max и как туда передать свою функцию?

Задан 7 месяцев назад613 просмотров3 ответа
13

Видел sorted(words, key=len) и max(people, key=...). Не до конца понимаю, что туда передаётся и зачем. Можно ли передать свою функцию, чтобы сортировать, например, список кортежей по второму элементу?

3 ответа

21
✓ Принятый ответ — помог автору

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

pairs = [('a', 3), ('b', 1), ('c', 2)]

# по второму элементу
sorted(pairs, key=lambda p: p[1])
# [('b', 1), ('c', 2), ('a', 3)]

# своя именованная функция тоже годится
def by_second(p):
    return p[1]
sorted(pairs, key=by_second)

Важно: передаёшь саму функцию без скобок (key=len, а не key=len()). То же работает в max, min и list.sort. Для убывания добавь reverse=True.

Дарья Епанова lambda тут чаще всего, но именованная функция читаемее для сложной логики · 7 месяцев назад
7

Это функция, по результату которой идёт сравнение. key=lambda p: p[1] — сортировать по второму элементу. Передавай функцию без ().

4

Можно ещё from operator import itemgetter и key=itemgetter(1) — то же самое, но чуть быстрее на больших списках.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект