按字典值排序字典列表

17 投票
4 回答
10140 浏览
提问于 2025-04-15 22:57

我有一个字典列表:

[{'title':'New York Times', 'title_url':'New_York_Times','id':4},
 {'title':'USA Today','title_url':'USA_Today','id':6},
 {'title':'Apple News','title_url':'Apple_News','id':2}]

我想按照标题来排序,也就是说,标题以A开头的要排在以Z开头的前面:

[{'title':'Apple News','title_url':'Apple_News','id':2},
 {'title':'New York Times', 'title_url':'New_York_Times','id':4},
 {'title':'USA Today','title_url':'USA_Today','id':6}]

有什么好的方法可以做到这一点吗?另外,有没有办法确保每个字典里的键的顺序是固定的,比如总是先是标题,再是标题链接,最后是ID?

4 个回答

2

在列表上调用 .sort(fn),其中 fn 是一个函数,用来比较标题的值并返回比较的结果。

mylist.sort(lambda x,y: cmp(x['title'], y['title']))

不过在后来的 Python 版本中(2.4 及以上),使用排序关键字会更好:

mylist.sort(key=lambda x:x['title'])

另外,字典在遍历键值时是会保持顺序的,只要你没有再添加或删除任何项。如果你添加或删除了项目,那么顺序就不一定了,这点是没有保证的。

19

对于那些在接触到lambda时会打喷嚏的人,这里有一个低过敏原的替代方案:

import operator
L.sort(key=operator.itemgetter('title','title_url','id'))
20
l.sort(key=lambda x:x['title'])

要进行多重排序,假设都是按升序排列:

l.sort(key=lambda x:(x['title'], x['title_url'], x['id']))

撰写回答