如何根据字典的值对字典列表进行排序?

2024-04-26 13:52:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字典列表,希望每个项都按特定的属性值排序。

考虑到下面的数组

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

当按name排序时,应该变成

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

Tags: name列表age字典属性排序数组bart
3条回答
my_list = [{'name':'Homer', 'age':39}, {'name':'Bart', 'age':10}]

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

my_list现在就是你想要的了。

(3年后)编辑添加:

新的key参数更高效、更整洁。现在一个更好的答案是:

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

……在我看来,lambda比operator.itemgetter更容易理解,但是YMMV。

import operator

按key=“name”对词典列表进行排序:

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

按key='age'对词典列表进行排序:

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

使用键而不是cmp可能看起来更干净:

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

或者像J.F.塞巴斯蒂安和其他人建议的那样

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

为了完整性(如fitzgeraldsteele在注释中指出的那样),添加reverse=True来按降序排序

newlist = sorted(l, key=itemgetter('name'), reverse=True)

相关问题 更多 >