Программа курса:
Сортировка списков и словарей с sorted, key

Сортировка — одна из ключевых операций при работе с данными. В Python для этого предназначена встроенная функция sorted()
, которая позволяет сортировать любые итерируемые объекты, такие как списки и словари. Ещё одна мощная возможность заключается в параметре key
, который позволяет задавать, как именно будут сравниваться элементы во время сортировки. В этой лекции мы рассмотрим, как использовать sorted()
и параметр key
, а также как эффективно применять анонимные функции lambda
для гибкой сортировки данных.
Функция sorted()
Функция sorted()
возвращает новый отсортированный список, оставляя исходные данные неизменными.
numbers = [4, 2, 9, 1, 7]
sorted_numbers = sorted(numbers)
print(sorted_numbers)
Вывод:
[1, 2, 4, 7, 9]
Пояснение:
В этом примере мы сортируем список numbers
, содержащий целые числа. Функция sorted()
возвращает новый список, где элементы упорядочены по возрастанию.
Параметр reverse
Чтобы отсортировать данные в обратном порядке, можно использовать параметр reverse=True
.
numbers = [4, 2, 9, 1, 7]
sorted_numbers = sorted(numbers, reverse=True)
print(sorted_numbers)
Вывод:
[9, 7, 4, 2, 1]
Пояснение:
Параметр reverse=True
говорит функции sorted()
, что нужно сортировать элементы по убыванию.
Параметр key
Одной из самых полезных возможностей функции sorted()
является параметр key
. Он позволяет передать функцию, которая будет применена к каждому элементу перед сравнением. Это особенно полезно, если нам нужно сортировать по определённому критерию.
Пример 1: Сортировка строк по длине
words = ["apple", "banana", "kiwi", "strawberry"]
sorted_words = sorted(words, key=len)
print(sorted_words)
Вывод:
['kiwi', 'apple', 'banana', 'strawberry']
Пояснение:
Здесь мы используем встроенную функцию len
в качестве key
. Она возвращает длину строки, поэтому элементы сортируются по количеству символов в словах.
Пример 2: Сортировка по последней букве
words = ["apple", "banana", "kiwi", "strawberry"]
sorted_words = sorted(words, key=lambda word: word[-1])
print(sorted_words)
Вывод:
['banana', 'apple', 'kiwi', 'strawberry']
Пояснение:
Мы применяем lambda
для создания анонимной функции, которая принимает строку и возвращает её последний символ. Это позволяет сортировать слова по последней букве.
Использование lambda
для сортировки
Функции lambda
идеально подходят для случаев, когда требуется кратковременная функция для параметра key
. Они могут быть использованы для сложных критериев сортировки, когда стандартных функций недостаточно.
Пример 3: Сортировка списка кортежей по второму элементу
data = [(1, 4), (3, 2), (5, 1), (2, 3)]
sorted_data = sorted(data, key=lambda x: x[1])
print(sorted_data)
Вывод:
[(5, 1), (3, 2), (2, 3), (1, 4)]
Пояснение:
Каждый элемент в списке — это кортеж. Мы используем lambda
, чтобы сортировать список по второму элементу каждого кортежа. Функция lambda x: x[1]
берёт второй элемент кортежа x
и использует его для сравнения.
Пример 4: Сортировка по длине строки и первой букве
Иногда нужно комбинировать несколько критериев сортировки. Для этого можно возвращать несколько значений в lambda
.
words = ["apple", "banana", "kiwi", "strawberry"]
sorted_words = sorted(words, key=lambda word: (len(word), word[0]))
print(sorted_words)
Вывод:
['kiwi', 'apple', 'banana', 'strawberry']
Пояснение:
Мы сортируем сначала по длине строки, а затем по первой букве. Если два элемента имеют одинаковую длину, то сравнение идёт по алфавиту.
Сортировка словарей
Функция sorted()
также может быть применена для сортировки словарей. Поскольку словари являются неупорядоченными коллекциями пар ключ-значение, сортировка может осуществляться либо по ключам, либо по значениям.
Пример 5: Сортировка словаря по ключам
dictionary = {'apple': 5, 'banana': 3, 'kiwi': 10, 'strawberry': 2}
sorted_keys = sorted(dictionary)
print(sorted_keys)
Вывод:
['apple', 'banana', 'kiwi', 'strawberry']
Пояснение:
По умолчанию sorted()
сортирует ключи словаря в алфавитном порядке.
Пример 6: Сортировка словаря по значениям
dictionary = {'apple': 5, 'banana': 3, 'kiwi': 10, 'strawberry': 2}
sorted_items = sorted(dictionary.items(), key=lambda item: item[1])
print(sorted_items)
Вывод:
[('strawberry', 2), ('banana', 3), ('apple', 5), ('kiwi', 10)]
Пояснение:
Мы сортируем список пар ключ-значение, используя lambda
, которая берёт второй элемент пары (значение) для сравнения.
Использование функции sorted()
с вложенными структурами
Пример 7: Сортировка списка словарей
students = [
{'name': 'John', 'age': 20},
{'name': 'Alice', 'age': 22},
{'name': 'Bob', 'age': 19}
]
sorted_students = sorted(students, key=lambda student: student['age'])
print(sorted_students)
Вывод:
[{'name': 'Bob', 'age': 19}, {'name': 'John', 'age': 20}, {'name': 'Alice', 'age': 22}]
Пояснение:
Мы сортируем список словарей по значению ключа 'age'
. Функция lambda
берёт возраст каждого студента для сравнения.
Пример комбинированной сортировки с использованием lambda
Пример 8: Сортировка по нескольким критериям в списке словарей
students = [
{'name': 'John', 'age': 20, 'grade': 'B'},
{'name': 'Alice', 'age': 22, 'grade': 'A'},
{'name': 'Bob', 'age': 19, 'grade': 'C'}
]
sorted_students = sorted(students, key=lambda student: (student['grade'], student['age']))
print(sorted_students)
Вывод:
[{'name': 'Alice', 'age': 22, 'grade': 'A'}, {'name': 'John', 'age': 20, 'grade': 'B'}, {'name': 'Bob', 'age': 19, 'grade': 'C'}]
Пояснение:
Мы сортируем студентов по двум критериям: сначала по оценке 'grade'
, а затем по возрасту 'age'
, если оценки одинаковые. Функция lambda
возвращает кортеж, который содержит два значения, используемые для сравнения.
Вот таблица, которая описывает использование функции sorted()
в Python, включая примеры использования параметров reverse
, key
, и работы с вложенными структурами данных:
Раздел | Описание | Пример | Вывод |
---|---|---|---|
Функция sorted() | Возвращает новый отсортированный список, оставляя исходные данные неизменными. | numbers = [4, 2, 9, 1, 7] sorted_numbers = sorted(numbers) print(sorted_numbers) | [1, 2, 4, 7, 9] |
Параметр reverse | Используется для сортировки в обратном порядке. | numbers = [4, 2, 9, 1, 7] sorted_numbers = sorted(numbers, reverse=True) print(sorted_numbers) | [9, 7, 4, 2, 1] |
Параметр key | Позволяет передать функцию, которая будет применена к каждому элементу перед сравнением. | ||
Пример 1: Сортировка строк по длине | Сортировка строк по их длине. | words = ["apple", "banana", "kiwi", "strawberry"] sorted_words = sorted(words, key=len) print(sorted_words) | ['kiwi', 'apple', 'banana', 'strawberry'] |
Пример 2: Сортировка по последней букве | Сортировка строк по последней букве. | words = ["apple", "banana", "kiwi", "strawberry"] sorted_words = sorted(words, key=lambda word: word[-1]) print(sorted_words) | ['banana', 'apple', 'kiwi', 'strawberry'] |
Пример 3: Сортировка по второму элементу | Сортировка списка кортежей по второму элементу каждого кортежа. | data = [(1, 4), (3, 2), (5, 1), (2, 3)] sorted_data = sorted(data, key=lambda x: x[1]) print(sorted_data) | [(5, 1), (3, 2), (2, 3), (1, 4)] |
Пример 4: Сортировка по длине и первой букве | Комбинированная сортировка по длине строки и первой букве. | words = ["apple", "banana", "kiwi", "strawberry"] sorted_words = sorted(words, key=lambda word: (len(word), word[0])) print(sorted_words) | ['kiwi', 'apple', 'banana', 'strawberry'] |
Сортировка словарей | Сортировка словарей по ключам или значениям. | ||
Пример 5: Сортировка по ключам | Сортировка словаря по ключам в алфавитном порядке. | dictionary = {'apple': 5, 'banana': 3, 'kiwi': 10, 'strawberry': 2} sorted_keys = sorted(dictionary) print(sorted_keys) | ['apple', 'banana', 'kiwi', 'strawberry'] |
Пример 6: Сортировка по значениям | Сортировка словаря по значениям. | dictionary = {'apple': 5, 'banana': 3, 'kiwi': 10, 'strawberry': 2} sorted_items = sorted(dictionary.items(), key=lambda item: item[1]) print(sorted_items) | [('strawberry', 2), ('banana', 3), ('apple', 5), ('kiwi', 10)] |
Использование функции sorted() с вложенными структурами | Сортировка вложенных структур данных, таких как списки словарей. | ||
Пример 7: Сортировка списка словарей | Сортировка списка словарей по значению ключа 'age'. | students = [{'name': 'John', 'age': 20}, {'name': 'Alice', 'age': 22}, {'name': 'Bob', 'age': 19}] sorted_students = sorted(students, key=lambda student: student['age']) print(sorted_students) | [{'name': 'Bob', 'age': 19}, {'name': 'John', 'age': 20}, {'name': 'Alice', 'age': 22}] |
Пример 8: Комбинированная сортировка | Сортировка списка словарей по нескольким критериям: сначала по 'grade', затем по 'age'. | students = [{'name': 'John', 'age': 20, 'grade': 'B'}, {'name': 'Alice', 'age': 22, 'grade': 'A'}, {'name': 'Bob', 'age': 19, 'grade': 'C'}] sorted_students = sorted(students, key=lambda student: (student['grade'], student['age'])) print(sorted_students) | [{'name': 'Alice', 'age': 22, 'grade': 'A'}, {'name': 'John', 'age': 20, 'grade': 'B'}, {'name': 'Bob', 'age': 19, 'grade': 'C'}] |
Эта таблица предоставляет краткое описание и примеры использования функции sorted()
, включая различные параметры и типичные случаи применения.
Использование функции sorted()
с параметром key
— это мощный инструмент для сортировки различных структур данных. В сочетании с анонимными функциями lambda
, вы можете легко настраивать сортировку по любым критериям, что позволяет значительно расширить возможности работы с данными.