首页 > 文章列表 > Python内置字典子类详解:包罗万象

Python内置字典子类详解:包罗万象

Python 字典 编程
496 2023-04-26

前言

本主要介绍Python集合模块中几个字典类(dict)的内置扩展子类的应用场景和使用示例,还是结合代码,让你能“短平快”的来掌握这些跟dict直接关联的子类——OrderedDict、defaultdict、userDict。

OrderedDict

Python集合模块中的有序字典(OrderedDict)就像普通字典一样,但是有一些与排序操作相关的额外功能。OrderedDict会记住键插入的顺序。现在它们变得不那么重要了,因为内置的dict类获得了记住插入顺序的能力(这种新行为在Python 3.7中得到了保证,因此OrderedDict现在显得不是那么重要了)。创建有序字典的常规格式:

运行输出结果如下:运行程序输出结果为:[('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

在上述代码中,我们使用列表类型作为default_factory,更易于将包含键值序列对的列表组成字典。当第一次遇到每个键时,它还不在映射中,因此使用default_factory函数自动创建一个条目,该函数返回一个空列表。然后list.append()操作将值连接到新列表。当再次遇到键时,查找正常进行(返回该键的列表),然后list.append()操作将另一个值添加到列表中。这种技术比使用dict.setdefault()的等效技术要简单得多。

我们再看一个示例:

Python内置字典子类详解:包罗万象

输出结果如下:

[('a', 2), ('c', 1), ('g', 2), ('h', 1), ('i', 1), ('j', 1), ('n', 2)]

在上面代码中,我们将default_factory设置为int。这使得defaultdict用于计数(就像其他语言中的bag或multiset)。

当第一次遇到某个字母时,它就在映射中是不存在的,因此default_factory函数调用int()来提供一个默认的0计数。然后递增操作为每个字母建立计数。

提示:这里传递的int()函数默认返回的是整数0。若想返回任意值,可以自定义个一个基于lambda的常量函数。示例代码如下:

Python内置字典子类详解:包罗万象

一言以蔽之:使用DefaultDict的好处就是可以避免KeyError异常,并进行一些可能的特定处理。

本文小结

本文主要介绍了Python字典(dict)类相关的几个内置子类的应用。这些直接相关的子类分别是OrderedDict、defaultdict、userDict等内置子类。通过示例代码和关联描述,让你更轻松掌握它们的应用和基本规则。