Этот вопрос проверяет понимание использования lambda-функций в качестве параметра key для настройки сортировки коллекций в Python.
В Python функции sorted() и метод списка list.sort() принимают параметр key, который определяет функцию, применяемую к каждому элементу для получения ключа сортировки. Lambda-функции идеально подходят для этой роли, так как позволяют кратко описать правило извлечения ключа прямо на месте, без объявления отдельной функции с помощью def.
Когда вы передаёте lambda в key, Python внутренне вызывает эту функцию для каждого элемента коллекции. Полученные результаты (ключи) используются для сравнения при сортировке, но исходные элементы остаются неизменными в итоговом списке. Это особенно полезно для сортировки сложных структур данных, таких как списки кортежей, словарей или объектов.
Рассмотрим несколько практических сценариев:
words = ['apple', 'fig', 'banana']
sorted_words = sorted(words, key=lambda s: len(s))
# Результат: ['fig', 'apple', 'banana']data = [('Alice', 25), ('Bob', 20), ('Charlie', 30)]
data.sort(key=lambda item: item[1])
# Результат: [('Bob', 20), ('Alice', 25), ('Charlie', 30)]users = [{'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 20}]
sorted_users = sorted(users, key=lambda d: d['age'])
# Результат: [{'name': 'Bob', 'age': 20}, {'name': 'Alice', 'age': 25}]names = ['alice', 'Bob', 'charlie']
sorted_names = sorted(names, key=lambda s: s.lower())
# Результат: ['alice', 'Bob', 'charlie']Такой подход широко используется при обработке данных, где требуется упорядочить коллекции по нестандартным критериям: сортировка объектов по атрибутам, упорядочивание записей из базы данных перед выводом, организация результатов поиска по релевантности. Lambda в key делает код компактным и читаемым, избегая загромождения пространства имён вспомогательными функциями.
Вывод: Используйте lambda в параметре key для быстрой и наглядной настройки сортировки по произвольному правилу, особенно когда правило простое и используется только в одном месте. Для более сложной логики, которая повторяется или требует документации, лучше определить именованную функцию.