我不太理解sorted()参数背后的语法:

key=lambda variable: variable[0]

不是任意的吗?为什么变量声明两次在什么看起来像字典?


当前回答

Key是一个函数,将在比较集合的项之前调用它来转换集合的项。传递给key的参数必须是可调用的。

lambda的使用创建了一个匿名函数(可调用)。在排序的情况下,可调用对象只接受一个参数。Python的lambda非常简单。它实际上只能做和返回一件事。

lambda的语法是:单词lambda后跟参数名列表,然后是一段代码。参数列表和代码块由冒号描述。这也类似于python中的其他结构,如while, for, if等。它们都是通常具有代码块的语句。Lambda只是带有代码块的语句的另一个实例。

我们可以比较使用lambda和使用def来创建函数。

adder_lambda = lambda parameter1,parameter2: parameter1+parameter2
def adder_regular(parameter1, parameter2): return parameter1+parameter2

只是给了我们一种不指定名称的方法。这使得它很适合用作函数的参数。

变量在这里使用了两次,因为冒号的左边是参数的名称,而在右边,它在代码块中用于计算一些东西。

其他回答

简单且不耗时的回答,并给出与所问问题相关的例子 下面这个例子:

 user = [{"name": "Dough", "age": 55}, 
            {"name": "Ben", "age": 44}, 
            {"name": "Citrus", "age": 33},
            {"name": "Abdullah", "age":22},
            ]
    print(sorted(user, key=lambda el: el["name"]))
    print(sorted(user, key= lambda y: y["age"]))

看看名单上的名字,他们以D、B、C和a开头,如果你注意一下年龄,他们是55岁、44岁、33岁和22岁。 第一个打印代码

print(sorted(user, key=lambda el: el["name"]))

结果:

[{'name': 'Abdullah', 'age': 22}, 
{'name': 'Ben', 'age': 44}, 
{'name': 'Citrus', 'age': 33}, 
{'name': 'Dough', 'age': 55}]

对名称进行排序,因为通过key=lambda el: el["name"],我们正在对名称进行排序,并且名称按字母顺序返回。

第二次打印代码

print(sorted(user, key= lambda y: y["age"]))

结果:

[{'name': 'Abdullah', 'age': 22},
 {'name': 'Citrus', 'age': 33},
 {'name': 'Ben', 'age': 44}, 
 {'name': 'Dough', 'age': 55}]

按年龄排序,因此列表按年龄升序返回。

为了更好地理解,请尝试以下代码。

换句话说,键(可选的。一个用来决定顺序的函数。默认为None)在排序函数中期望一个函数,您使用lambda。

定义lambda时,指定要排序的对象属性,python内置的sorted函数将自动处理。

如果你想按多个属性排序,那么分配key = lambda x:(property1, property2)。

要指定order-by,将reverse= true作为第三个参数(可选。一个布尔值。False将升序排序,True将降序排序。默认为False)的排序函数。

lambda是一个Python关键字,用于生成匿名函数。

>>> (lambda x: x+2)(3)
5

另一个使用sorted()函数key=lambda的例子。假设您有一个元组列表。在每个元组中都有汽车的品牌、型号和重量,并希望按品牌、型号或重量对元组列表进行排序。你可以用。

cars = [('citroen', 'xsara', 1100), ('lincoln', 'navigator', 2000), ('bmw', 'x5', 1700)]

print(sorted(cars, key=lambda car: car[0]))
print(sorted(cars, key=lambda car: car[1]))
print(sorted(cars, key=lambda car: car[2]))

结果:

[('bmw', 'x5', '1700'), ('citroen', 'xsara', 1100), ('lincoln', 'navigator', 2000)]
[('lincoln', 'navigator', 2000), ('bmw', 'x5', '1700'), ('citroen', 'xsara', 1100)]
[('citroen', 'xsara', 1100), ('bmw', 'x5', 1700), ('lincoln', 'navigator', 2000)]

lambda和排序的另一种用法如下:

给定输入阵列:人= [[7 0],[4 4],[7,1],[5,0],[6,1],[5,2]]

线:people_sort =排序(人,关键=λx: (x - x[0],[1]))将people_sort列表[[7,0],[7,1],[6,1],[5,0],[5,2],[4 4]]

在本例中,key=lambda x:(-x[0], x[1])基本上告诉sorted首先根据每个实例的第一个元素的值对数组进行排序(按照减号所示的降序排列),然后在同一子组中,根据每个实例的第二个元素进行排序(按照默认选项的升序排列)。

希望这是对你有用的信息!