我尝试按属性对一些值进行排序,如下所示:
a = sorted(a, lambda x: x.modified, reverse=True)
我收到此错误消息:
<lambda>() takes exactly 1 argument (2 given)
为什么?我要怎么补救?这个问题最初是为Python 2.x编写的,在Python 3.x中,错误消息会有所不同:TypeError: sorted expected 1 argument, got 2.
TypeError: sorted expected 1 argument, got 2
soat7uwm1#
用途
a = sorted(a, key=lambda x: x.modified, reverse=True) # ^^^^
在Python 2.x中,sorted函数按照以下顺序获取参数:
sorted
sorted(iterable, cmp=None, key=None, reverse=False)
因此,如果没有key=,传入的函数将被视为cmp函数,它有两个参数。
key=
cmp
ffscu2ro2#
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')]
omtl5h9j3#
你试图在lambda函数中使用key函数。Python和其他语言如C#或F#使用lambda functions。此外,在关键功能方面,根据documentationlist.sort()和sorted()都有一个关键参数,用于指定在进行比较之前对每个列表元素调用的函数。...key参数的值应该是一个函数,该函数接受一个参数并返回一个用于排序的键。这种技术速度很快,因为key函数对每条输入记录只调用一次。所以,key函数有一个参数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)
kdfy810k4#
在Python 3中:
from functools import cmp_to_key def compare(i1,i2): return i1-i2 events.sort(key=cmp_to_key(compare))
m4pnthwp5#
看看这个例子,你就会明白:
a = input() a = sorted(a, key = lambda x:(len(x),x)) print(a)
输入:["tim", "bob", "anna", "steve", "john","aaaa"]输出:['bob', 'tim', 'aaaa', 'anna', 'john', 'steve']输入:["tim", "bob", "anna", "steve", "john","aaaaa"]输出:['bob', 'tim', 'anna', 'john', 'aaaaa', 'steve']
["tim", "bob", "anna", "steve", "john","aaaa"]
['bob', 'tim', 'aaaa', 'anna', 'john', 'steve']
["tim", "bob", "anna", "steve", "john","aaaaa"]
['bob', 'tim', 'anna', 'john', 'aaaaa', 'steve']
a = ["tim", "bob", "anna", "steve", "john","aaaaa","zzza"] a = sorted(a, key = lambda x:(x[-1],len(x),x)) print(a)
输出:['anna', 'zzza', 'aaaaa', 'bob', 'steve', 'tim', 'john']
['anna', 'zzza', 'aaaaa', 'bob', 'steve', 'tim', 'john']
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)
输出:[[4, 9], [3, 8], [1, 6], [2, 6], [2, 5], [9, 5], [1, 4], [0, 3], [3, 1]]
[[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,以便按相反的顺序对元素进行排序。
key = lambda x:(p1,p2,p3,p4,...,pn)
x
p1,p2,p3...pn
p1>p2>p3>...>pn
5条答案
按热度按时间soat7uwm1#
用途
在Python 2.x中,
sorted
函数按照以下顺序获取参数:因此,如果没有
key=
,传入的函数将被视为cmp
函数,它有两个参数。ffscu2ro2#
它将打印如下:
omtl5h9j3#
你试图在lambda函数中使用key函数。
Python和其他语言如C#或F#使用lambda functions。
此外,在关键功能方面,根据documentation
list.sort()和sorted()都有一个关键参数,用于指定在进行比较之前对每个列表元素调用的函数。
...
key参数的值应该是一个函数,该函数接受一个参数并返回一个用于排序的键。这种技术速度很快,因为key函数对每条输入记录只调用一次。
所以,key函数有一个参数key,它可以接收一个lambda函数。
在Real Python中有一个很好的例子来说明它的用法。
并希望对它的“整数”进行排序。然后,您可以执行以下操作
打印出来会给予
在您的特定情况下,您只需要在lambda之前写入
key=
。kdfy810k4#
在Python 3中:
m4pnthwp5#
看看这个例子,你就会明白:
输入:
["tim", "bob", "anna", "steve", "john","aaaa"]
输出:
['bob', 'tim', 'aaaa', 'anna', 'john', 'steve']
输入:
["tim", "bob", "anna", "steve", "john","aaaaa"]
输出:
['bob', 'tim', 'anna', 'john', 'aaaaa', 'steve']
输出:
['anna', 'zzza', 'aaaaa', 'bob', 'steve', 'tim', 'john']
输出:
[[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,以便按相反的顺序对元素进行排序。