min с ключом: кортежи и стабильность в Python
@python_quizРазберем этот квиз
Коротко о задаче: дана небольшая программа, использующая min с разными ключами. Нужно понять, какой текст выведет print. Разберём код, поведение ключей и почему получается конкретный результат.
Исходный код

Что делает min с ключом (key)
- Если key возвращает кортеж, сравнение происходит лексикографически: сначала сравниваются первые элементы кортежа, при равенстве — вторые и т. д.
- Если key возвращает одно значение (например, age), то min выбирает элемент с минимальным ключом.
- При равных ключах Python сохраняет порядок исходной последовательности — выбор будет первым из равнозначных элементов (стабильность поведения).
Почему именно такой вывод
Разберём оба вызова:
u1 = min(users,key=lambda u: (u['age'], u['name']))
- Ключи для элементов: для первой записи (30, 'Ира'), для второй (30, 'Иван').
- Первые компоненты равны (30 == 30), сравниваются вторые компоненты — строки.
- Строки сравниваются лексикографически по кодам символов. Сравним вторые символы:
- 'Ира' → последовательность символов ['И', 'р', 'а']
- 'Иван' → ['И', 'в', 'а', 'н']
- Первые символы одинаковы ('И' == 'И'), далее сравниваем 'р' и 'в'.
- Код 'в' меньше кода 'р', значит 'Иван' < 'Ира'.
- Следовательно, u1 — запись с именем "Иван".
u2 = min(users,key=lambda u: u['age'])
- Оба возраста равны (30), ключи одинаковы.
- При равных ключах min возвращает первый встреченный элемент в списке — это запись с именем "Ира".
- Таким образом, u2 — запись с именем "Ира".
Итоговый вывод print: имя из u1, затем вертикальная черта, затем имя из u2.
Демонстрация сравнения символов (для любопытных)

Окончательный результат программы

Анализ других вариантов (кратко)
- Комбинации, где оба имени одинаковы — не соответствуют кортежному сравнению и стабильности.
- Пара, где первая часть вывода "Ира" и вторая — "Иван" — не учитывает лексикографическое сравнение строк и стабильность при равных ключах.
Вывод
Использование кортежа в key позволяет задавать приоритеты сравнения (сначала age, затем name). При равных значениях ключа, возвращаемом из key, порядок решает min — он стабильный и вернёт первый встреченный элемент. Для данного списка это даёт вывод "Иван | Ира".