详解Python中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中defaultdict的具体使用的详细内容,更多关于python defaultdict的资料请关注脚本之家其它相关文章!
相关文章
使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件及出现问题解决方法
这篇文章主要介绍了使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件的方法,给大家介绍了通过Pyinstaller打包Pygame库写的小游戏程序出现的问题及解决方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下2019-09-09tensorboard 可以显示graph,却不能显示scalar的解决方式
今天小编就为大家分享一篇tensorboard 可以显示graph,却不能显示scalar的解决方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2020-02-02
最新评论