如何在Python中使用lambda进行排序

时间:2010-09-22 05:46:42

标签: python lambda

在Python中,我试图用lambda按日期排序。我无法理解我的错误信息。消息是:

<lambda>() takes exactly 1 argument (2 given)

我的行是

a = sorted(a, lambda x: x.modified, reverse=True)

4 个答案:

答案 0 :(得分:255)

使用

a = sorted(a, key=lambda x: x.modified, reverse=True)
#             ^^^^

在Python 2.x上,sorted函数按此顺序获取其参数:

sorted(iterable, cmp=None, key=None, reverse=False)

因此,如果没有key=,您传入的函数将被视为cmp函数,该函数需要2个参数。

答案 1 :(得分:4)

lst = [('candy','30','100'), ('apple','10','200'), ('baby','20','300')]
lst.sort(key=lambda x:x[1])
print(lst)

它将打印如下:

[('apple', '10', '200'), ('baby', '20', '300'), ('candy', '30', '100')]

答案 2 :(得分:1)

您正在尝试将键函数与lambda函数一起使用。

Python和其他语言(例如C#或F#)使用lambda functions

此外,关于关键功能并按照documentation

list.sort()sorted()都有一个关键参数 在创建之前指定要在每个列表元素上调用的函数 比较。

...

key参数的值应该是一个函数,该函数接受单个参数并返回用于排序目的的键。这种技术之所以快捷,是因为每个输入记录都只对键函数调用一次。

因此,键函数具有参数键,并且确实可以接收lambda函数。

Real Python中有一个很好的用法示例。假设您有以下列表

ids = ['id1', 'id100', 'id2', 'id22', 'id3', 'id30']

,并希望通过其“整数”进行排序。然后,您将执行类似的操作

sorted_ids = sorted(ids, key=lambda x: int(x[2:])) # Integer sort

并打印它会给出

['id1', 'id2', 'id3', 'id22', 'id30', 'id100']

在您的特定情况下,您只缺少在lambda之前写key=。因此,您需要使用以下

a = sorted(a, key=lambda x: x.modified, reverse=True)

答案 3 :(得分:0)

Python列表具有两种内置的数据排序方式:

sort() — A method that modifies the list in-place
sorted() — A built-in function that builds a new sorted list from an iterable

根据您的要求,您可以选择以下两种:

如果要保留原始列表,可以使用排序功能,或者如果不需要原始列表,则可以使用排序功能。

在进行排序或排序之前,我们需要了解lambda。

lambda是一个匿名函数,一个匿名函数是一个没有名称定义的函数,这篇文章似乎很好地解释了它。

https://www.programiz.com/python-programming/anonymous-function

Lambda函数非常适合内联调用,因为它们只有一个表达式被评估并返回。他们对于lambda的语法是:

lambda参数:表达式

让我们看看如何使用排序功能:

student_tuples = [('john', 'A', 15),('jane', 'B', 12),('dave', 'B', 10),]
sorted(student_tuples, key=lambda student: student[2]) 

输出: [('dave','B',10),('jane','B',12),('john','A',15)]

在这里我们可以看到具有tuples的student_tuples列表是根据提供的键参数student [2]进行排序的。