Python类型错误: Must Use Keyword Argument for Key Function
本文介绍了简单而强大的方法来对项目列表进行排序,并在sort()
方法中使用lambda函数。我们还讨论了为什么我们无法执行Python的sort()
方法。
如何在 Python 中正确使用Key参数的 sort()
方法
有序数据是许多Web服务的核心。当我们执行搜索时,算法会返回一个有序的相关结果列表,而在网上购物时,我们通常希望按价格对产品进行排序。
当我们查看日历时,我们希望我们的约会按时间顺序排序。
让我们从一个经典的例子开始,按字母顺序排序。我们将使用六种碱土金属的列表。
它们是按原子序数排序的,但如果我们想按字母顺序排序呢?对于列表,我们调用sort()
方法。
sort()
方法假设您希望数据按字母顺序升序排序。如果您想以相反的顺序对数据进行排序,则可以调用sort()
方法并指定reverse
等于True
。
代码:
Earth_Metals=["Berylium","Magnisium","Calcium","strontium","Barium","Radium"]
Earth_Metals.sort()
print(Earth_Metals)
如果你看一下这个列表,名字是按字母顺序倒序排列的。
输出:
['Barium', 'Berylium', 'Calcium', 'Magnisium', 'Radium', 'strontium']
让我们重复这个例子,除了这一次,我们将元素存储在元组而不是列表中。当我们尝试对元组进行排序时,Python会抱怨并引发异常。
这个错误的原因是元组是不可变的对象。它们不能被改变,而排序会改变事情。
Earth_Metals=("Berylium","Magnisium","Calcium","strontium","Barium","Radium")
Earth_Metals.sort()
print(Earth_Metals)
输出:
AttributeError: 'tuple' object has no attribute 'sort'
在我们看一个更复杂的例子之前,让我们先看一下列表上的help()
方法的sort
文本。
sort方法接受两个关键字参数key
和reverse
。默认情况下,reverse
设置为false
,这意味着数据将按升序排序。
代码:
help(list.sort)
输出:

让我们把重点放在行动所在的第一个论点上。要使用key参数,需要传入一个函数,该函数将用于确定排序所依据的值。
假设我们正在构建一个处理订单的应用程序,我们有一个订单项列表,列表中的每一项都是一个元组,其中包含两个项:产品名称和价格。让我们看看如果我们对这个列表进行排序并打印条目会发生什么。
代码:
items=[("product1",10),
("product2",9),
("product3",12)]
items.sort()
print(items)
输出:
[('product1', 10), ('product2', 9), ('product3', 12)]
当我们执行代码时,没有任何变化,因为Python不知道如何对这个列表进行排序。在这种情况下,我们需要定义Python的函数来对列表进行排序。
我们将通过使用lambda表达式或匿名函数使其更清晰,因此我们不必首先定义此函数,然后传递它。相反,我们添加lambda,编写lambda函数的语法是这样的,我们添加参数冒号,然后是表达式。
我们将只有一个参数;然后,在冒号(:
)之后,我们返回一个值为1的项。
代码:
items=[("product1",10),
("product2",9),
("product3",12)]
items.sort(key=lambda item:item[1])
print(items)
输出:
[('product2', 9), ('product1', 10), ('product3', 12)]
一些初学者尝试给key
参数给予多个参数值,并得到错误,因为key
参数只接受一个值。我们无法执行代码的另一个原因是我们直接传递了函数,而不是使用key
参数。