在Python中,我试图用lambda按日期排序.我无法理解我的错误信息.消息是:
<lambda>() takes exactly 1 argument (2 given)
Run Code Online (Sandbox Code Playgroud)
我的路线是
a = sorted(a, lambda x: x.modified, reverse=True)
Run Code Online (Sandbox Code Playgroud)
ken*_*ytm 285
使用
a = sorted(a, key=lambda x: x.modified, reverse=True)
# ^^^^
Run Code Online (Sandbox Code Playgroud)
在Python 2.x上,该sorted函数按以下顺序获取其参数:
sorted(iterable, cmp=None, key=None, reverse=False)
Run Code Online (Sandbox Code Playgroud)
所以如果没有key=,你传入的函数将被认为是一个带有cmp2个参数的函数.
小智 10
lst = [('candy','30','100'), ('apple','10','200'), ('baby','20','300')]
lst.sort(key=lambda x:x[1])
print(lst)
Run Code Online (Sandbox Code Playgroud)
它将打印如下:
[('apple', '10', '200'), ('baby', '20', '300'), ('candy', '30', '100')]
Run Code Online (Sandbox Code Playgroud)
看看这个例子,你就会明白:
示例1:
a = input()
a = sorted(a, key = lambda x:(len(x),x))
print(a)
Run Code Online (Sandbox Code Playgroud)
输入["tim", "bob", "anna", "steve", "john","aaaa"]
输出:['bob', 'tim', 'aaaa', 'anna', 'john', 'steve']
输入["tim", "bob", "anna", "steve", "john","aaaaa"]
输出:['bob', 'tim', 'anna', 'john', 'aaaaa', 'steve']
示例 2(高级):
a = ["tim", "bob", "anna", "steve", "john","aaaaa","zzza"]
a = sorted(a, key = lambda x:(x[-1],len(x),x))
print(a)
Run Code Online (Sandbox Code Playgroud)
输出:['anna', 'zzza', 'aaaaa', 'bob', 'steve', 'tim', 'john']
示例 3(高级):
a = [[1,4],[2,5],[3,1],[1,6],[3,8],[4,9],[0,3],[2,6],[9,5]]
a = sorted(a, key = lambda x:(-x[1],x[0]))
print(a)
Run Code Online (Sandbox Code Playgroud)
输出:[[4, 9], [3, 8], [1, 6], [2, 6], [2, 5], [9, 5], [1, 4], [0, 3], [3, 1]]
结论:
key = lambda x:(p1,p2,p3,p4,...,pn),
x是输入流中一次一个元素。
p1,p2,p3...pn是需要对元素流进行排序的属性。
基于 的优先顺序p1>p2>p3>...>pn。
我们还可以在排序条件后添加reverse=True,对元素进行逆序排序。
在Python3中:
from functools import cmp_to_key
def compare(i1,i2):
return i1-i2
events.sort(key=cmp_to_key(compare))
Run Code Online (Sandbox Code Playgroud)
您正在尝试将关键函数与 lambda 函数一起使用。
Python 和其他语言(如 C# 或 F#)使用lambda 函数。
此外,当涉及到关键功能时,根据文档
既list.sort()和排序()具有一个关键参数来指定一个函数被调用之前,进行比较每个列表元件上。
...
key 参数的值应该是一个函数,它接受一个参数并返回一个用于排序目的的键。这种技术很快,因为对于每个输入记录,键函数只被调用一次。
所以,键函数有一个参数键,它确实可以接收一个 lambda 函数。
在Real Python 中有一个很好的例子说明它的用法。假设您有以下列表
ids = ['id1', 'id100', 'id2', 'id22', 'id3', 'id30']
Run Code Online (Sandbox Code Playgroud)
并希望对其“整数”进行排序。然后,你会做类似的事情
sorted_ids = sorted(ids, key=lambda x: int(x[2:])) # Integer sort
Run Code Online (Sandbox Code Playgroud)
并打印它会给
['id1', 'id2', 'id3', 'id22', 'id30', 'id100']
Run Code Online (Sandbox Code Playgroud)
在您的特定情况下,您只是缺少key=在 lambda 之前编写。所以,你想使用以下
a = sorted(a, key=lambda x: x.modified, reverse=True)
Run Code Online (Sandbox Code Playgroud)