sorting - 重新排序由字典组成的列表的 Pythonic 方式是什么?

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

我想到了使用排序并创建一个 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/

相关文章:

C++:销毁自己内部的lambda

lambda - 无效的方法引用/不明确的引用(javac/ecj 行为差异)

java - Java中如何检查一个数组的值并将其与另一个数组进行比较?

java - 我应该在 TDD 中使用 lambda 吗?

arrays - Ruby - 将数组元素移动到给定位置

python - Python 中的桑基图

python - 在 Jupyter Notebook 中找不到 OpenCV,但在终端中找到

java - 哈希函数将k个最近的数据映射到同一个桶中

ruby-on-rails - 按另一个 id 数组对 activerecord 结果集进行排序

sorting - Elasticsearch URI按字段名称排序