迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python中defaultdict的使用

作者:迹忆客 最近更新:2023/06/29 浏览次数:

今天的文章讨论 defaultdict 容器并使用代码示例演示其用法。


Python 中的 defaultdict 与 dict

defaultdict 是一个类似字典的容器,属于 collections 模块。 它是字典的子类; 因此它具有词典的所有功能。 然而,defaultdict 的唯一目的是处理 KeyError。

# return true if the defaultdict is a subclass of dict (dictionary)
from collections import defaultdict
print(issubclass(defaultdict,dict))

输出:

True

假设用户在字典中搜索条目,并且搜索到的条目不存在。 普通字典会出现KeyError,表示该条目不存在。 为了解决这个问题,Python 开发人员提出了 defaultdict 的概念。

代码示例:

# normal dictionary
ord_dict = {
    "x" :3,
    "y": 4
}

ord_dict["z"]   # --> KeyError

输出:

KeyError: 'z'

普通字典无法处理未知键,当我们搜索未知键时,它会抛出 KeyError,如上面的代码所示。

另一方面,defaultdict 模块的工作方式与 Python 词典类似。 尽管如此,它仍然具有先进、有用且用户友好的功能,并且当用户在字典中搜索未定义的键时不会抛出错误。

相反,它在字典中创建一个条目,并针对该键返回一个默认值。 为了理解这个概念,让我们看看下面的实际部分。

代码示例:

from collections import defaultdict

# the default value for the undefined key
def def_val():
    return "The searched Key Not Present"

dic = defaultdict(def_val)

dic["x"] = 3
dic["y"] = 4

# search 'z' in the dictionary 'dic'
print(dic["z"]) # instead of a KeyError, it has returned the default value
print(dic.items())

输出:

The searched Key Not Present
dict_items([('x', 3), ('y', 4), ('z', 'The searched Key Not Present')])

defaultdict 创建我们尝试使用该键访问的任何项目,该键在字典中未定义。

并且创建这样一个默认项,它调用我们传递给defaultdict的构造函数的函数对象,更准确地说,该对象应该是一个包含类型对象和函数的可调用对象。

在上面的示例中,默认项是使用 def_val 函数创建的,该函数根据字典中未定义的键返回字符串“搜索到的键不存在”。

Python 中的 defaultdict

default_factory 是 __missing__() 方法使用的 defaultdict 构造函数的第一个参数,如果构造函数的参数丢失,default_factory 将被初始化为 None,这将出现 KeyError。

如果 default_factory 是用 None 以外的东西初始化的,它将被分配为搜索到的键的值,如上面的示例所示。


Python 中 defaultdict 的有用函数

字典和defaultdict有很多功能。 我们知道,defaultdict可以访问字典的所有功能; 然而,这些是 defaultdict 特有的一些最有用的函数。

Python 中的 defaultdict.clear()

代码示例:

from collections import defaultdict

# the default value for the undefined key
def def_val():
    return "Not Present"

dic = defaultdict(def_val)

dic["x"] = 3
dic["y"] = 4

print(f'Before clearing the dic, values of x = {dic["x"]} and y = {dic["y"]}')
dic.clear() #dic.clear() -> None. it will remove all items from dic.
print(f'After clearing the dic, values of x = {dic["x"]} and y = {dic["y"]}')

输出:

Before clearing the dic, values of x = 3 and y = 4
After clearing the dic, values of x = Not Present and y = Not Present

正如我们在上面的示例中看到的,字典 dic 中有两对数据,其中 x=3 和 y=4。 然而,使用 clear() 函数后,数据已被删除,x和y的值不再存在,这就是为什么我们得到的x和y不存在。

Python 中的 defaultdict.copy()

代码示例:

from collections import defaultdict

# the default value for the undefined key
def def_val():
    return "Not Present"

dic = defaultdict(def_val)

dic["x"] = 3
dic["y"] = 4

dic_copy = dic.copy() # dic.copy will give you a shallow copy of dic.

print(f"dic = {dic.items()}")
print(f"dic_copy = {dic_copy.items()}")

输出:

dic = dict_items([('x', 3), ('y', 4)])
dic_copy = dict_items([('x', 3), ('y', 4)])

defaultdict.copy() 函数用于将字典的浅表副本复制到另一个我们可以相应使用的变量中。

Python 中的 defaultdict.default_factory()

代码示例:

from collections import defaultdict

# the default value for the undefined key
def def_val():
    return "Not present"

dic = defaultdict(def_val)

dic["x"] = 3
dic["y"] = 4

print(f"The value of z = {dic['Z']}")
print(dic.default_factory()) # default_factory returns the default value for defaultdict.

输出:

The value of z = Not present
Not present

default_factory()函数用于为定义的类的属性提供默认值,一般情况下,default_factory的值是函数返回的值。

Python 中的 defaultdict.get(key, default value)

代码示例:

from collections import defaultdict

# the default value for the undefined key
def def_val():
    return "Not present"

dic = defaultdict(def_val)

dic["x"] = 3
dic["y"] = 4

# search the value of Z in the dictionary dic; if it exists, return the value; otherwise, display the message
print(dic.get("Z","Value doesn't exist")) # default value is None

输出:

Value doesn't exist

defaultdict.get() 函数有两个参数,第一个是键,第二个是键的默认值,以防该值不存在。

但第二个参数是可选的。 所以我们可以指定任何消息或值; 否则,它将显示 None 作为默认值。

上一篇:Python 中的 with 语句

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Python 中的 with 语句

发布时间:2023/06/29 浏览次数:83 分类:Python

本篇文章将介绍with语句的功能及其在Python中的应用。在Python中使用with语句 该语句本质上用于帮助处理异常并在使用资源时清理资源。 它确保代码正确执行并随后清理资源。

Python 单步执行代码

发布时间:2023/06/29 浏览次数:145 分类:Python

在本文中,我们将讨论使用 Python 调试器单步调试代码。 我们将从头开始解释一个名为 PDB 的命令行工具。 我们还将学习如何在 Python IDLE 的帮助下逐步执行代码。

Python 编辑距离

发布时间:2023/06/29 浏览次数:67 分类:Python

今天,我们将学习Python中的编辑距离。 我们还将探讨字符串的插入、删除、替换和递归实现。在 Python 中编辑距离 编辑距离是将一个字符串转置为另一个字符串所需的量。

在 Python 中解析 JSON 对象数组

发布时间:2023/06/28 浏览次数:57 分类:Python

由于浏览器可以快速解析 JSON 对象,因此它们有助于在客户端和服务器之间传输数据。 本文将介绍如何使用Python的JSON模块传输和接收JSON数据。

在 Python 中等待 5 秒

发布时间:2023/06/28 浏览次数:152 分类:Python

本篇文章将讨论如何在 Python 中等待 5 秒。在 Python 中使用 time.sleep() 函数等待 5 秒 Python 的 time 模块提供了存储和操作时间的功能和对象。

Python 中的模糊字符串匹配

发布时间:2023/06/28 浏览次数:89 分类:Python

今天,我们将学习如何使用 thefuzz 库,它允许我们在 python 中进行模糊字符串匹配。 此外,我们将学习如何使用 process 模块,该模块允许我们借助模糊字符串逻辑有效地匹配或提取字符串。Py

在 Python 中执行 Shell 命令并获取输出

发布时间:2023/06/28 浏览次数:81 分类:Python

在本文中,我们将学习如何借助 os.system() 从 Python 脚本执行 cmd 命令。 我们还将学习如何借助 Python 中的 subprocess 模块以更简单的方式从脚本执行 cmd 命令。从 Python 脚本执行 CMD 命令并使用 os

Python 中的 Monkey 补丁

发布时间:2023/06/28 浏览次数:186 分类:Python

本文解释了什么是Monkey补丁以及如何在 Python 中实现它。 它有两个部分; 第一个演示了函数中的Monkey修补,第二个演示了如何在文件的单元测试中实现它。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便