我有以下列表:
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']))
最佳答案
不,使用 cmp=
效率不高。请改用 key=
。像这样:
sorted(list, key=lambda x: x['nr'])
原因很简单:cmp
比较两个对象。如果您的列表很长,则您必须比较两个对象的许多组合,因此两倍长的列表需要两倍多的时间来排序。
但使用 key
时情况并非如此,因此对长列表进行排序快得多。
但是使用 key
而不是 cmp
的主要原因是它更容易使用。
此外,sorted
() 比 .sort()
有一个好处,它可以接受任何可迭代对象,而 .sort()
仅适用于列表。
关于sorting - 重新排序由字典组成的列表的 Pythonic 方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4647524/