Зачем нужен key= в sorted и max и как туда передать свою функцию?
Видел sorted(words, key=len) и max(people, key=...). Не до конца понимаю, что туда передаётся и зачем. Можно ли передать свою функцию, чтобы сортировать, например, список кортежей по второму элементу?
3 ответа
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.
Это функция, по результату которой идёт сравнение. key=lambda p: p[1] — сортировать по второму элементу. Передавай функцию без ().
Можно ещё from operator import itemgetter и key=itemgetter(1) — то же самое, но чуть быстрее на больших списках.