什么是重新排序由dicts组成的列表的Pythonic方法?

时间:2011-01-10 13:56:49

标签: sorting python lambda

我有以下列表:

list = [{'nr' : 2, 'name': 'streamname'}, {'nr' : 3,'name': 'streamname'}, {'nr' : 1, 'name': 'streamname'}]

那么我如何在python中以高效的方式重新排序呢?

list = [{'nr' : 1, 'name': 'streamname'}, {'nr' : 2,'name': 'streamname'}, {'nr' : 3, 'name': 'streamname'}]

我想出了使用sort并创建一个lambda函数来对其进行排序。这是一个好方法吗?它有效吗?

list.sort(cmp=lambda x,y: cmp(x['nr'], y['nr']))

2 个答案:

答案 0 :(得分:12)

不,使用cmp=效率不高。请改用key=。像这样:

sorted(list, key=lambda x: x['nr'])

原因很简单:cmp比较两个对象。如果您的列表很长,则可以对两个对象进行多种组合比较,因此列出两倍长的列表所需的时间要长两倍。

但是对于key,情况并非如此,因此排序长列表会更快

但使用key代替cmp的主要原因是它更容易使用。

此外,sorted()的优势超过.sort(),可以采用任何可迭代,而.sort()则适用于列表。

答案 1 :(得分:3)

mylist.sort(key=operator.itemgetter('nr'))