Python 错误 TypeError: Must Use Keyword Argument for Key Function
本文介绍对项目列表进行排序并在 sort()
方法中使用 lambda 函数的简单而强大的方法。 我们还讨论了为什么我们无法执行 Python 的 sort()
方法。
在 Python 中的 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 方法接受两个关键字参数: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 函数的语法如下所示:我们添加参数冒号,然后添加表达式。
我们只有一个参数; 然后,在冒号(:
)之后,我们返回一项为一。
代码:
items=[("product1",10),
("product2",9),
("product3",12)]
items.sort(key=lambda item:item[1])
print(items)
输出:
[('product2', 9), ('product1', 10), ('product3', 12)]
一些初学者尝试为关键参数提供多个参数值,但会收到错误,因为关键参数只接受一个值。 我们无法执行代码的另一个原因是我们直接传递了函数而不是使用 key 参数。
相关文章
Python 中错误 Address Already in Use
发布时间:2023/07/09 浏览次数:173 分类:Python
-
我们将通过示例介绍Python中何时出现 Address already in use 错误以及如何解决。Python 中的错误Address already in use 本文将讲述运行使用端口的程序时发生的Python堆栈错误。
Python 中错误 ValueError: Math Domain Error
发布时间:2023/07/09 浏览次数:607 分类:Python
-
在本篇文章中,我们的目标是探索解决 Python 中的 ValueError: math domain error 错误的不同方法。当编码方面数学(基础或高级)的使用存在固有缺陷时,Python 中通常会引发 ValueError: math domain error 错
Python 错误 Name xrange Is Not Defined
发布时间:2023/07/09 浏览次数:153 分类:Python
-
本篇文章将介绍如何解决 Python 中 name 'xrange' is not defined 的错误。解决Python中name 'xrange' is not defined错误 让我们尝试理解为什么会发生这个特定的错误。 让我们首先尝试复制这个问题。
Python 错误 TypeError: List Indices Must Be Integers, Not STR
发布时间:2023/07/09 浏览次数:954 分类:Python
-
在本篇文章中,我们的目标是探索如何避免 TypeError: list indices must be integers or slices, not str。TypeError主要发生在Python中,每当操作的数据类型出现问题时。
Python 中错误 AttributeError: __Enter__
发布时间:2023/07/09 浏览次数:2241 分类:Python
-
在 Python 中,AttributeError 是在未定义 __enter__ 函数的情况下通过 with 语句使用类的对象时导致的错误。
Python 错误 ModuleNotFoundError: No Module Named '_Ctypes'
发布时间:2023/07/09 浏览次数:686 分类:Python
-
本篇文章旨在了解如何解决 Python 中的 ModuleNotFoundError: No module named '_ctypes'。了解Python中 ModuleNotFoundError: No module named '_ctypes' 根本原因
Python 错误 AttributeError: '_io.TextIOWrapper' Object Has No Attribute 'Split'
发布时间:2023/07/09 浏览次数:1063 分类:Python
-
本篇文章将介绍如何修复 Python 中的 AttributeError: '_io.TextIOWrapper' object has no attribute 'split'。在 _io.TextIOWrapper 上使用 split() 方法会返回 AttributeError
Python 错误 AttributeError: _csv.reader Object Has No Attribute Next
发布时间:2023/07/09 浏览次数:286 分类:Python
-
本篇文章将介绍如何修复 Python 中的 AttributeError: '_csv.reader' object has no attribute 'next'。修复 Python 中的 AttributeError: '_csv.reader' object has no attribute 'next' 错误
Python 错误 Error: Invalid Command Bdist_wheel
发布时间:2023/07/09 浏览次数:847 分类:Python
-
在 Python 中构建 wheel 时,有时 setup.py 可能会退出并出现错误 invalid command 'bdist_wheel'。 本篇文章将讨论在 Python 中解决此问题的可能解决方案。安装wheel包来修复Python中 Error:invalid command 'bdist_