使用 Python 字典的一些高级方法2024 年 08 月 29 日 | 阅读 9 分钟 在本教程中,我们将解释字典的一些重要且令人兴奋的用例。字典是最重要和最有用的数据结构,它存储键值对,并且灵活、高效且易于使用。尽管 Python 字典通常用于计数频率、映射值或组织数据等任务,但它们可以以各种富有创意和意想不到的方式使用。本文旨在深入探讨您可能尚未考虑到的 Python 字典的十种独特和非常规用途。让我们看看字典的一些激动人心的用法。
记忆化记忆化是一种通过将先前函数调用的输出存储在缓存中来提高昂贵函数调用性能的方法。在 Python 中,我们可以利用字典来实现记忆化。这是通过定义一个字典来完成的,其中函数参数作为键,相应的函数输出作为值。在执行函数之前,我们可以检查结果是否已存在于字典中,如果存在,则检索缓存的输出而不是重新计算函数。让我们理解以下示例。 示例 - 解释 - 上面的代码首先定义了昂贵的函数,代表我们希望使用记忆化优化的耗时计算。然后它创建一个空缓存字典来存储函数结果。 memoized_function() 接受一个参数,并首先检查该参数的结果是否已存在于缓存中。如果存在,则检索并返回缓存的输出。如果不存在,则调用 expensive_function() 来计算函数输出,然后将其存储在缓存中以供将来使用。该函数最终返回计算结果。 稀疏矩阵稀疏矩阵是其中大多数元素为零的矩阵。考虑到存储矩阵中的所有零将是低效的,因此可以使用字典仅存储非零元素。在这种方法中,字典中的键是包含非零矩阵元素索引的元组,而值是这些非零元素本身。 示例 &ndash 解释 - sparse_matrix 字典包含稀疏矩阵的表示。在此特定示例中,矩阵有三个非零元素。 第一个非零元素位于矩阵的第一行和第一列,对应于字典中的键 (0, 0)。与此键关联的值为 1,表示矩阵中第 0 行第 0 列的元素为 1。 第二个非零元素位于矩阵的第二行和第三列,对应于字典中的键 (1, 2)。与此键关联的值为 3,表示矩阵中第 1 行第 2 列的元素为 3。 第三个非零元素位于矩阵的第三行和第二列,对应于字典中的键 (2, 1)。与此键关联的值为 5,表示矩阵中第 2 行第 1 列的元素为 5。 通过利用字典仅存储矩阵的非零元素,我们可以节省存储和操作零元素所需的内存和计算时间。 计数器计算元素组合的频率是使用 Python 字典的一种有用技术。可以通过创建一个字典来实现,其中键是我们想要计数的元素组合,值是相应的频率。 例如,如果我们有一个单词列表并想要计算每个同时出现的单词对的频率,我们可以使用字典来实现。让我们理解以下示例。 示例 - 解释 - 在上面的代码中,我们创建了一个名为 pair_freq 的空字典,然后遍历单词列表,创建每个相邻单词对的元组。然后它检查该对是否已存在于字典中,如果存在,则将其频率加 1。如果该对不存在于字典中,则将其添加并将其频率设置为 1。 循环结束时,字典 pair_freq 包含原始列表中每个相邻单词对的频率。我们可以调整此方法来计算其他元素组合的频率,例如三元组或 n 元组。 XML/HTML 解析在 Python 中,XML 和 HTML 文档中使用的标签可以表示为嵌套字典。我们可以使用 xmltodict 库将 XML 文档转换为 Python 字典。让我们看看以下 XML 文档。 示例 - 我们可以使用 xmltodict 库和以下代码将此 XML 文档转换为 Python 字典。 示例 - 输出 { 'book': { 'title': 'Python Tricks', 'author': 'Dan Bader', 'publisher': 'Real Python', 'published_on': '2017-06-03' } } 解释 - 在上面的代码中,我们导入 xmltodict 库,它提供了 parse() 函数,可用于将 XML 字符串转换为 Python 字典。XML 文档以字符串形式表示在 xml_str 变量中。 使用 xmltodict.parse() 解析 XML 字符串后,生成的 Python 字典存储在 book_dict 变量中。然后使用 print() 函数在控制台上显示字典的内容。 正如我们所看到的,XML 标签在生成的字典中表示为键,它们的值是标签的内容。如果 XML 文档中有嵌套标签,它们将作为嵌套字典表示在生成的 Python 字典中。 配置文件在 Python 中,字典可以作为存储程序配置选项的便捷方式。我们可以定义一个具有默认值的字典,然后通过加载配置文件来修改或覆盖这些值。让我们理解以下示例。 示例 - 在这种情况下,DEFAULT_CONFIG 是一个包含四个键值对的字典,每个键值对代表一个具有默认值的配置选项。 要加载配置文件并修改字典中的值,可以使用像 configparser 这样的库。 示例 - 在此代码中,configparser 用于加载名为 myprogram.ini 的配置文件。假定配置文件有一个名为 [myprogram] 的部分,其中包含表示配置选项的键值对。 如果存在,DEFAULT_CONFIG 字典中的值将使用配置文件中的值进行更新。如果配置文件中未指定配置选项,则使用默认值。 这样,您可以通过在配置文件中指定配置选项来轻松修改 Python 程序的行为,而无需修改程序代码。 缓存 API 响应在使用 API 时,为了避免发出不必要的请求,缓存响应以供将来使用会很有帮助。我们可以通过使用字典作为简单缓存来实现它,您可以在其中将 API 请求映射到其相应的响应。 要在 Python 中发出 API 请求,可以使用像 requests 这样的库。以下是使用字典缓存 API 响应的示例。 示例 - 说明 在此代码中,创建了一个空字典 cache 来存储 API 响应。定义了 get_api_data() 函数以发出 API 请求并缓存响应。 该函数检查请求的 API URL 是否已在缓存字典中。如果是,则函数返回缓存的响应。如果请求的 URL 不在缓存中,则函数使用 requests 库发出 API 请求,并将响应存储在缓存字典中以供将来使用。 通过使用字典作为缓存,我们可以避免发出冗余的 API 请求,并提高程序整体性能。 状态机状态机是一种计算模型,用于描述处于多种状态之一的系统的行为。在 Python 中,我们可以使用字典来表示状态机,其中键表示状态,值也是字典,将输入符号映射到下一个状态。 以下是使用 Python 字典表示状态机的示例 示例 - 在上面的代码中,state_machine 是一个字典,表示一个简单的状态机,具有三种状态:'state_A'、'state_B' 和 'state_C'。嵌套字典根据输入符号“symbol_1”和“symbol_2”定义了状态之间可能的转换。 例如,如果当前状态是“state_A”并且输入符号是“symbol_1”,则下一个状态将是“state_B”。如果输入符号是“symbol_2”,则下一个状态将是“state_C”。 要使用此状态机,您首先需要设置初始状态,然后使用输入符号在状态之间进行转换。 输出 'state_B' 'state_A' 编码和解码数据字典是 Python 中在不同格式之间编码和解码数据的有用工具。使用字典实现此目的的一种方法是将 JSON 对象编码为查询字符串或将查询字符串解码为 JSON 对象。 要使用字典将 JSON 对象编码为查询字符串,可以使用 urllib.parse.urlencode() 函数,该函数接受键值对字典并返回查询字符串。 示例 - 输出 'name=John+Doe&age=30&city=New+York' 解释 - 在上面的代码中,json_obj 字典表示一个具有三个键值对的 JSON 对象。urllib.parse.urlencode() 函数将 JSON 对象编码为查询字符串。 要使用字典将查询字符串解码为 JSON 对象,可以使用 urllib.parse.parse_qs() 函数,该函数接受查询字符串并返回键值对字典 示例 - 输出 '{"name": ["John Doe"], "age": ["30"], "city": ["New York"]}' 解释 - 在此示例中,query_string 变量表示一个具有三个键值对的查询字符串。urllib.parse.parse_qs() 函数用于将查询字符串解码为键值对字典,然后使用 json.dumps() 函数将其转换为 JSON 对象。 使用字典在不同格式之间编码和解码数据是 Python 中一个强大的工具,允许您处理各种格式的数据,而无需为每种格式编写自定义编码和解码函数。 结论字典是 Python 中一种多功能且强大的数据结构,除了简单的键值映射之外,还有许多意想不到的用途。它们可以表示复杂的数据结构,例如图和状态机,并用于缓存 API 响应以及在不同格式之间编码/解码数据。 总之,了解 Python 字典的全部潜力可以帮助您编写更高效、简洁和富有表现力的代码,同时提高应用程序的性能和可伸缩性。 下一主题Python 中的字符串操作 |
操作系统需要页面置换算法来采用分页技术来管理内存,以确定当添加新页面时哪个页面必须被移除。每当引用一个新页面但内存中尚不存在时,就会发生页面错误,并且...
阅读 8 分钟
scipy.stats.maxwell(),被称为第二类帕累托分布,定义了麦克斯韦连续随机变量。它是从通用方法继承的 rv_continuous 类的一个实例。它通过添加特定于此分布的细节来完善这些技术。scipy.stats.maxwell() 中包含的参数有:q:...
阅读 3 分钟
统计学中的基本概念之一是随机变量及其分布的研究。本教程将让您彻底了解泊松离散分布,它是统计/概率论中的一个关键组成部分,最后,学习其各种属性和使用 Python 进行计算。让...
11 分钟阅读
Kivy 是 Python 中的图形用户界面工具,它是平台独立的。使用 Kivy 开发的应用程序可以在 IOS、Windows、Linux 和 Android 操作系统上使用。Kivy 工具的基本用途是开发 Android 操作系统的应用程序,但它...
阅读 6 分钟
什么是 SMOTE?合成少数过采样 (SMOTE) 过程增加了用于人工智能的信息数据集中较少引入的案例数量。这是一种通过复制现有案例来增加案例数量的更好方法。当我们需要处理...
5 分钟阅读
简介:在本文中,我们将讨论 Python 的布尔值 False。例如,1==1 为 True,但 2<1 为 False。布尔值变量的值要么为 True,要么为 False。我们内置的变量统计类型可以是布尔值。在...
阅读 3 分钟
引言:在本文中,我们将讨论 Python 前端框架。Python 处于意外的上升趋势。需求肯定会持续下去,短期内没有放缓的迹象。预计 Python 在未来几年内将超越 Java 和 C#。许多超现代的...
阅读 3 分钟
在从程序打印数据时,我们遇到了以标准格式打印数据集的问题。输出中打印的数据没有明确的格式,这使得数据看起来杂乱无章。此外,这也使我们难以查找特定...
阅读 13 分钟
Python 是最广泛使用的编程语言之一。凭借其易于理解的语法、高效率和一流的开源库,我们可以用 Python 做任何事情。然而,我们可能已经注意到,有些人喜欢 Python 2,而另一些人则喜欢 Python 3。两者之间的区别是...
阅读 2 分钟
在本教程中,我们将学习一种流行且广泛使用的行业标准数据交换格式 REST API。它是最常用的数据交换技术。我们将解释如何使用 Django 在 Python 中创建 REST API。在深入探讨之前……
阅读 19 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India