按dict值对dicts列表进行排序

时间:2010-05-20 21:44:21

标签: python sorting dictionary

我有一个词典列表:

[{'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?

4 个答案:

答案 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']))

虽然这只是对标题和订单的排序,但是未定义。做多个级别会很痛苦。