python的sorted函数中的key参数是如何工作的?

2024-06-13 19:52:38 发布

您现在位置:Python中文网/ 问答频道 /正文

说我有

votes = {'Charlie': 20, 'Able': 10, 'Baker': 20, 'Dog': 15}

我明白

^{pr2}$

会导致

[('Able', 10), ('Dog', 15), ('Baker', 20), ('Charlie', 20)]`

但这是怎么回事?在


Tags: abledogbakervotescharliepr2
3条回答
>>> votes = {'Charlie': 20, 'Able': 10, 'Baker': 20, 'Dog': 15}

如果我们在上面的votes字典上应用.items(),我们得到:

^{pr2}$

对于每个元组,第一个索引[0]是字符串('Charlie','Able','Baker','Dog'),第二个索引[1]是整数(20,10,20,15)。在

print(sorted(votes.items(), key = lambda x: x[1]))指示python使用每个元组的第二个索引[1](tuples)中的项(tuples)进行排序,作为排序的基础。在

Python比较每个元组中的每个整数,并返回一个按升序排列每个元组的列表(可以使用reverse=True参数反转),使用每个元组的整数作为key来确定元组的排名

如果关键字中有并列项,则按它们在字典中的原始顺序排列。(所以('Charlie', 20)('Baker', 20)之前,因为在键上有一个20==20的领带,但是在原始的votes字典中,'Charlie', 20)('Baker', 20)之前)。在

输出结果是:

 [('Able', 10), ('Dog', 15), ('Charlie', 20), ('Baker', 20)]

我希望这样更容易理解。在

传递给key的函数将给出正在排序的每个项,并返回Python可以按其排序的“键”。因此,如果要按字符串的反向对字符串列表进行排序,可以执行以下操作:

list_of_strings.sort(key=lambda s: s[::-1])

这使您可以指定每个项目排序依据的值,而不必更改项目。这样,您就不必构建一个反转字符串的列表,对其进行排序,然后将它们反转回去。在

^{pr2}$

在您的例子中,代码是按元组中的第二个项对每个项进行排序,而通常情况下,它将首先按元组中的第一个项排序,然后断开与第二个项的关系。在

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

使用lambda创建一个匿名函数(可调用)。在sorted的情况下,callable只接受一个参数。Python的lambda非常简单。它只能做和返回一件事真的。在

相关问题 更多 >