按字典值排序字典列表
我有一个字典列表:
[{'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']))