Сортировка списка Python по двум полям: алгоритм и решения

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы отсортировать список по двум критериям, воспользуйтесь функцией sorted(), передав ей в параметр key кортеж из двух элементов —окажутся именно теми критериями, по которым будет выполняться сортировка. Ниже приведен код, демонстрирующий описанный подход:

Python
Скопировать код
# Пусть у нас имеется список словарей
data = [{'name': 'Джон', 'age': 25, 'score': 90},
        {'name': 'Доу', 'age': 22, 'score': 95},
        {'name': 'Джейн', 'age': 25, 'score': 100}]

# Сортировка сначала по полю 'age', затем по полю 'score'
sorted_data = sorted(data, key=lambda x: (x['age'], x['score']))

Список будет отсортирован в первую очередь по полю 'age' (возраст), а затем — по полю 'score' (оценка) в рамках каждого возраста. Это аналогично ситуации, когда парами обуви сначала сортируют по размеру, а затем — по цвету.

Кинга Идем в IT: пошаговый план для смены профессии

Разбор сортировки по нескольким критериям

Стабильность: Суперсила сортировки

Сортировка в Python относится к типу стабильных сортировок: если ключи равны, первоначальный порядок элементов сохраняется. Это свойство особенно важно при сортировке по нескольким полям, как в нашем примере с возрастом и оценкой.

Влияние на производительность

Сортировка по нескольким полям может заметно отразиться на производительности вашего алгоритма. В зависимости от того, используете ли вы lambda или itemgetter, скорость выполнения может меняться, поэтому время от времени стоит замерять производительность вашего кода.

Пользовательские функции: VIP-зона сортировки

Если стандартных методов сортировки недостаточно, на помощь могут прийти пользовательские функции. Они позволяют реализовывать комбинированные схемы сравнения, учитывая различные условия, такие как регистронезависимость или смешанные типы данных.

Обратная сортировка: Перевернем все с ног на голову

Сортировка в обратном порядке выглядит сложнее, когда имеется несколько критериев. Важно учесть направление сортировки для каждого поля индивидуально, как будто вы — дирижер оркестра, руководящий исполнением каждого инструмента.

Визуализация

Предположим, у вас на руках колода карт:

Markdown
Скопировать код
Колода: [🂡, 🂱, 🃁, 🃑, 🂢, 🂾]
  • Первичная сортировка (масть): 🂠🃁🃑🃞
  • Затем внутри каждой масти (номинал): 🂡🂢🂣🂾

Продолжим будто бы укладываем слои торта:

Markdown
Скопировать код
- Первый слой (♠️♣️♥️♦️): масть.
- Второй слой (Т, 2, 3, …, К): номинал в рамках масти.

Применяем аналогичный принцип к данным:

🔢🔤list.sort(key=lambda x: (x.suit, x.rank))

В итоге имеем аккуратно упорядоченную колоду карт:

Markdown
Скопировать код
🂠🂡🂢🂣...🂾 | 🃁🃑🃁🃒...🃞 | 🃑🃒🃑🃓...🃟 | 🂞🂟🂠...
# Сначала упорядочиваем пики по номиналу, затем черви и так далее.

Завершение

Сложные структуры данных и сортировка

Работая со сложными структурами данных, вроде списков классов или вложенных словарей, будьте готовы к тому, что функция key для сортировки потребует от вас творческого подхода и глубокого понимания структуры данных.

Сортировка на месте: волшебство метода .sort()

В отличие от sorted(), который создает новый список, метод .sort() сортирует список на месте. Это может быть весьма полезно при работе с крупными объемами данных, когда возникает потребность экономить память:

Python
Скопировать код
# Волшебство сортировки на месте с 'list.sort()'
data.sort(key=lambda x: (x['age'], x['score']))

Сортировка: открывая тайны

Сортировка становится особо важной при работе с различными источниками данных, например, при чтении файлов формата CSV. Преобразуйте содержимое файла в список словарей или кортежей и примените методы сортировки с помощью sorted() или .sort().

Полезные материалы

  1. Сортировка HOW TO — Документация Python 3.12.2 — официальное руководство по сортировке в Python.
  2. HowTo/Sorting – Python Wiki — подробные сведения о сортировке и функциях ключей в Python.
  3. Как использовать лямбда-функции в Python – Real Python — руководство по использованию лямбда-функций в задачах сортировки и не только.
  4. Встроенные типы — Документация Python 3.12.2 — использование метода list.sort() в Python.
  5. Python | Сортировка списка в соответствии с другим списком – GeeksforGeeks — управление сортировкой списка на основе другого списка.
  6. operator — Стандартные операторы как функции — Документация Python 3.12.2 — использование функции itemgetter для сортировки по нескольким аспектам.