Назад к вопросам
Junior
91
questionbank

Как отсортировать список словарей по определённому полю?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Для сортировки списка словарей по определенному полю можно использовать функцию sorted() с параметром key или метод списка .sort().

Пример с sorted():

# Исходный список словарей
data = [
    {'name': 'Bob', 'age': 30},
    {'name': 'Alice', 'age': 25},
    {'name': 'Charlie', 'age': 35}
]

# Сортировка по полю 'age'
sorted_data = sorted(data, key=lambda x: x['age'])

# print(sorted_data)  # Вывод отсортированного списка

Пример с .sort():

# Исходный список словарей
data = [
    {'name': 'Bob', 'age': 30},
    {'name': 'Alice', 'age': 25},
    {'name': 'Charlie', 'age': 35}
]

# Сортировка списка inplace по полю 'name'
data.sort(key=lambda x: x['name'])

# print(data)  # Вывод отсортированного списка

Оба подхода используют анонимную функцию lambda, которая извлекает значение ключа для сортировки. Функция sorted() возвращает новый отсортированный список, а метод .sort() сортирует список на месте (inplace).

Можно использовать функцию operator.itemgetter для более лаконичной записи:

import operator

# Исходный список словарей
data = [
    {'name': 'Bob', 'age': 30},
    {'name': 'Alice', 'age': 25},
    {'name': 'Charlie', 'age': 35}
]

# Сортировка по полю 'age' с использованием itemgetter
sorted_data = sorted(data, key=operator.itemgetter('age'))

# print(sorted_data)  # Вывод отсортированного списка

Для обратной сортировки можно добавить параметр reverse=True:

import operator

# Исходный список словарей
data = [
    {'name': 'Bob', 'age': 30},
    {'name': 'Alice', 'age': 25},
    {'name': 'Charlie', 'age': 35}
]

# Сортировка по полю 'age' в обратном порядке
sorted_data_reverse = sorted(data, key=operator.itemgetter('age'), reverse=True)

# print(sorted_data_reverse)  # Вывод отсортированного списка в обратном порядке