我有以下列表:
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']))
答案 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'))