Вопрос-Ответ

How to sort a list of dictionaries by a value of the dictionary in Python?

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

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

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

При сортировке по name он должен стать:

[{'name': 'Bart', 'age': 10}, {'name': 'Homer', 'age': 39}]
Переведено автоматически
Ответ 1

sorted() Функция принимает key= параметр

newlist = sorted(list_to_be_sorted, key=lambda d: d['name']) 

В качестве альтернативы вы можете использовать operator.itemgetter вместо того, чтобы определять функцию самостоятельно

from operator import itemgetter
newlist = sorted(list_to_be_sorted, key=itemgetter('name'))

Для полноты картины добавьте reverse=True для сортировки в порядке убывания

newlist = sorted(list_to_be_sorted, key=itemgetter('name'), reverse=True)
Ответ 2
import operator

Отсортировать список словарей по ключу='name':

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

Отсортировать список словарей по ключу='возрасту':

list_of_dicts.sort(key=operator.itemgetter('age'))
Ответ 3
my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]

my_list.sort(lambda x,y : cmp(x['name'], y['name']))

my_list теперь это будет то, что вы хотите.

Или лучше:

Начиная с Python 2.4, есть key аргумент, который является более эффективным и аккуратным:

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

... лямбда, IMO, проще для понимания, чем operator.itemgetter, но ваш пробег может отличаться.

Ответ 4

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

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']))

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

2023-07-04 02:23 python list sorting dictionary