我有一个词典列表:
[{'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}]
最好的方法是什么? 另外,有没有办法确保每个字典键的顺序保持不变,例如,总是标题,title_url,然后是id?
答案 0 :(得分:20)
l.sort(key=lambda x:x['title'])
要使用多个键进行排序,请按升序排列:
l.sort(key=lambda x:(x['title'], x['title_url'], x['id']))
答案 1 :(得分:19)
对于那些在被lambdas接近时打喷嚏的人来说,这是一种低过敏性的替代品:
import operator
L.sort(key=operator.itemgetter('title','title_url','id'))
答案 2 :(得分:2)
在列表中调用.sort(fn)
,其中fn
是一个比较标题值并返回比较结果的函数。
mylist.sort(lambda x,y: cmp(x['title'], y['title']))
在更高版本的Python中,虽然(2.4+),但使用排序键要好得多:
mylist.sort(key=lambda x:x['title'])
此外,只要没有更多的添加/删除,您可以保证字典保持其顺序,是否要遍历键/值。但是,如果您添加或删除项目,所有投注均已关闭,则无法保证。
答案 3 :(得分:-1)
originalList.sort(lambda d1, d2: cmp(d1['title'], d2['title']))
虽然这只是对标题和订单的排序,但是未定义。做多个级别会很痛苦。