Python 中的 Defaultdict

2025年4月18日 | 阅读 4 分钟

字典是 Python 中用于存储映射等数据值的无序数据集合。字典存储的是键值对,而不是像其他数据类型那样只存储单个值作为元素。字典中的键必须是唯一的且不可变的。也就是说,Python 元组可以作为键,但 Python 列表不能作为字典的键。我们可以通过将一系列元素放在花括号 {} 中来创建字典,值之间可以用逗号 "," 分隔。

示例 1

输出

Dictionary: 
{1: 'A', 2: 'B', 3: 'C', 4: 'D'}
key pair 1: A
key pair 3: C

但是,如果我们尝试打印第 5 个键的值,我们会收到一个错误,因为 “Dict_1” 不包含第 5 个键的值。

示例 2

输出

Dictionary: 
{1: 'A', 2: 'B', 3: 'C', 4: 'D'}
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
 in 
      2 print ("Dictionary: ")
      3 print (Dict_1)
----> 4 print ("key pair 5: ", Dict_1[5])

KeyError: 5

当出现 KeyError 时,这可能会给用户带来麻烦。我们可以通过使用 Python 中的另一种字典来克服此错误,这种字典类似于一个名为 Defaultdict 的容器。用户可以在 'collections' 模块中找到此字典。

defaultdict

defaultdict 是 Python 中的一个字典,类似于 'collections' 模块中存在的容器。它是字典类的一个子类,用于返回类似字典的对象。defaultdict 和 dictionary 具有相同的功能,不同之处在于 defaultdict 永远不会引发 KeyError,因为它为用户创建的字典中不存在的键提供了一个默认值。

语法

参数

  • default_factory: default_factory() 函数返回用户为他们定义的字典设置的默认值。如果缺少此参数,字典将引发 KeyError。

示例

输出

Dictionary: 
defaultdict(, {'ABC': 1, 'DEF': 2, 'GHI': 3, 'JKL': 4})
key pair 1:  1
key pair 3:  3
key pair 5:  This key is not present

defaultdict 的内部工作原理

当我们使用 defaultdict 时,除了标准的字典操作外,我们还会获得一个可写实例变量和一个方法。可写实例变量是 default_factory 参数,而 __missing__ 是该方法。

  • default_factory: default_factory() 函数返回用户为他们定义的字典设置的默认值。

示例

输出

Dictionary: 
defaultdict( at 0x0000019EFC4B58B0>, {'ABC': 1, 'DEF': 2, 'GHI': 3, 'JKL': 4})
key value 1:  1
key value 3:  3
key value 5:  This key is not present
  • __missing__(): __missing__() 函数用于为字典提供默认值。__missing__() 函数将 default_factory 作为参数,如果参数设置为 None,则会引发 KeyError;否则,它将为给定键提供一个默认值。该方法实际上由 dict 类的 __getitem__() 函数调用,当请求的键未找到时。__getitem__() 函数引发或返回 __missing__() 函数中存在的值。

示例

输出

Dictionary: 
defaultdict( at 0x0000019EFC4B5670>, {'ABC': 1, 'DEF': 2, 'GHI': 3, 'JKL': 4})
key value 1:  This key is not present
key value 4:  4
key value 5:  This key is not present

如何使用“List”作为 default_factory

我们可以将 list 类作为 default_factory 参数传递,它将创建一个具有以列表格式设置的值的 defaultdict。

示例

输出

Dictionary with values as list:
defaultdict(<class 'list'>, {7: [7], 8: [8], 9: [9], 10: [10], 11: [11]})

如何使用“int”作为 default_factory

我们可以将 int 类作为 default_factory 参数传递,它将创建一个默认值为零的 defaultdict。

示例

输出

defaultdict(<class 'int'>, {1: 2, 2: 3, 3: 1, 4: 2})

结论

在本教程中,我们讨论了 Python 中的 defaultdict 以及如何通过使用 default_factory 参数对 defaultdict 执行不同的操作。