如何按照字典中的值对Python字典列表进行排序?

2781 投票
22 回答
1358498 浏览
提问于 2025-04-11 09:16

我该如何根据特定键的值对字典列表进行排序?假设有这样一个列表:

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

当根据 name 排序时,它应该变成:

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

22 个回答

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

...在我看来,使用 lambda 比 operator.itemgetter 更容易理解,不过每个人的感受可能不同。

240
import operator

要按照字典中的'name'这个键来排序列表:

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

要按照字典中的'age'这个键来排序列表:

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

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)

撰写回答