28

Как отсортировать список словарей по значению словаря в Python?

24

Как отсортировать список словарей по значению определенного ключа?

У меня есть список словарей, который выглядит следующим образом:

[{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age': 10}]

Я хочу отсортировать этот список по ключу name. Ожидаемый результат сортировки:

[{'name': 'Bart', 'age': 10}, {'name': 'Homer', 'age': 39}]

Как мне это сделать?

5 ответ(ов)

2

Для того чтобы отсортировать список словарей по ключу 'name', вы можете использовать следующую конструкцию:

list_of_dicts.sort(key=operator.itemgetter('name'))

А если вы хотите отсортировать список словарей по ключу 'age', то используйте:

list_of_dicts.sort(key=operator.itemgetter('age'))

Таким образом, вы сможете легко сортировать ваши словари по нужным ключам, используя модуль operator и метод sort().

1

Ваш код для сортировки списка словарей на Python немного устарел, так как cmp и стандартная функция sort() с функцией сравнения не работают в Python 3. Вместо этого рекомендуется использовать аргумент key, который более эффективен и читабелен.

Вот как это можно сделать:

my_list = [{'name': 'Homer', 'age': 39}, {'name': 'Bart', 'age': 10}]

my_list.sort(key=lambda x: x['name'])

В результате my_list будет отсортирован по именам.

Также, если вы хотите создать новый отсортированный список, не изменяя оригинальный, используйте функцию sorted():

sorted_list = sorted(my_list, key=lambda k: k['name'])

Лямбда-функция в этом случае, на мой взгляд, легче для понимания, чем использование operator.itemgetter, но это может зависеть от ваших предпочтений.

0

Если вы хотите отсортировать список по нескольким ключам, вы можете сделать следующее:

my_list = [{'name': 'Homer', 'age': 39}, {'name': 'Milhouse', 'age': 10}, {'name': 'Bart', 'age': 10}]
sortedlist = sorted(my_list, key=lambda elem: "%02d %s" % (elem['age'], elem['name']))

Хотя это решение можно считать немного "костыльным", так как оно зависит от преобразования значений в одну строку для сравнения, оно тем не менее работает, как ожидается, даже для чисел, включая отрицательные (обратите внимание, что если вы используете числа, нужно правильно отформатировать строку с нулями).

0

В вашем примере a — это список словарей, где каждый словарь содержит информацию о персонаже (имя и возраст).

Первый способ, который вы используете:

a.sort(key=lambda k: k['name'])

Этот метод изменяет сам список a на месте и сортирует его по имени персонажа. То есть, после выполнения этой строки, список a будет отсортированный, и никаких новых списков не создается.

Второй способ:

sorted(a, key=lambda k: k['name'])

Этот метод возвращает новый отсортированный список, при этом исходный список a остается без изменений. Если вы хотите сохранить отсортированный результат, вам необходимо присвоить его новой переменной:

sorted_list = sorted(a, key=lambda k: k['name'])

Таким образом, разница между sort() и sorted() заключается в том, что первый метод изменяет оригинальный список, а второй — создает новый список без изменения оригинала.

0

В данном коде используется метод sort() для сортировки списка словарей (a_list_of_dicts). Параметр key позволяет задать, по какому критерию будет происходить сортировка, в данном случае — по произвольному значению. Функция operator.itemgetter('name') извлекает значение по ключу 'name' из каждого словаря, что и задает критерий сортировки. Таким образом, список будет отсортирован по имени, которое хранится в каждом словаре.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь