2011-01-10 46 views
4

我有以下列表:什么是重新排列由字典组成的列表的Pythonic方式?

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'}] 

我想出了使用排序和创建一个lambda函数来排序它。这是一个好方法吗?它有效吗?

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

看起来不错。 – neil 2011-01-10 14:00:27

回答

12

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

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

原因很简单:cmp比较两个对象。如果您的列表很长,那么您可以比较两个对象的许多组合,因此列表长度的两倍要比分类长两倍多。

但与key这是不是这种情况和排序长列表因此很多更快。

但使用key而不是cmp的主要原因是使用起来更容易。

此外,sorted()与.sort()相比具有优势,它可以采用任何可迭代的方式,而.sort()仅适用于列表。

+0

Yea正在研究它,但是当我使用key = x ['nr']有点愚蠢的时候,我没有为它做一个lambda函数,它不起作用。猜猜我很快就可以接受你的回答,但会保持开放几个小时。 – 2011-01-10 14:03:10

3
mylist.sort(key=operator.itemgetter('nr')) 
相关问题