Статья Автор: Деникина Н.В., Деникин А.В.

Сортировка по столбцу

Порядок как инструмент

Фильтр отвечает «какие строки подходят», агрегат — «какая таблица в целом». Третий базовый приём — сортировка. Она отвечает на вопросы вида «самый», «первые несколько», «в середине».

В Python сортирует функция sorted. Ей нужно объяснить, по чему сравнивать строки — для этого есть параметр key:

by_gross = sorted(movies, key=lambda m: int(m["gross"]))

lambda m: ... — это просто короткая безымянная функция: «дай мне фильм, я верну число, по которому его сравнивать». Без int сравнение пойдёт по строкам, и «9» окажется больше «1000000».


По убыванию и устойчивость

По умолчанию sorted идёт по возрастанию. Чтобы получить обратный порядок, добавляют reverse=True.

by_gross = sorted(movies, key=lambda m: int(m["gross"]), reverse=True)

Два важных свойства. Первое: sorted не меняет исходный список, а возвращает новый — movies остаётся в прежнем порядке. Второе: сортировка устойчива, то есть строки с одинаковым ключом сохраняют взаимный порядок. Благодаря этому сортировку можно применять дважды и получить сортировку по двум столбцам: сначала по второстепенному, потом по главному.



Что показал вывод

На первом месте «Avatar» с 2847.2 млн. И отдельно напечатана строка, подтверждающая, что movies[0] по-прежнему «The Shining» — исходный список не тронут.

Это не мелочь. Функция, которая молча меняет то, что ей передали, — источник ошибок, которые потом ищут часами. sorted так не делает: она возвращает новый список.


Какой фильм собрал больше всех? Впиши название так, как оно в таблице.

Что вернёт sorted(movies, key=lambda m: m["gross"]) — без int внутри?

Отметь верные утверждения про сортировку.

Ты хочешь отсортировать фильмы по жанру, а внутри жанра — по убыванию сборов. В каком порядке применить две сортировки?
Загрузка...
Чтобы оставить комментарий, необходимо авторизоваться
💬
Пока нет комментариев. Будьте первым!
Печать