详解Python 中的容器 collections
Python 中的 `collections` 模块是标准库中一个强大的工具,它提供了多种高级容器数据类型,可以帮助开发者更高效地组织和操作数据。本篇文章将深入探讨 `collections` 模块中的 `namedtuple` 和 `defaultdict` 这两个常用的数据结构。 **1. `namedtuple`** `namedtuple` 是元组的一个子类,它允许我们将元组的元素赋予有意义的名字,使得代码更具可读性。创建 `namedtuple` 需要指定元组的名称和包含的字段名。以下是一个简单的示例: ```python from collections import namedtuple Person = namedtuple('Person', 'name age occupation') john = Person(name='John', age=30, occupation='Engineer') print(john) ``` 输出: ``` Person(name='John', age=30, occupation='Engineer') ``` `namedtuple` 提供了类似字典的访问方式,可以直接通过字段名来获取或设置值,如 `john.name`。尽管看起来像字典,但 `namedtuple` 实际上是不可变的,这意味着一旦创建,就不能修改其内容。此外,`namedtuple` 也支持 `_asdict()` 方法,可以将 `namedtuple` 转换为一个有序字典 `OrderedDict`。 ```python print(john._asdict()) ``` 输出: ``` OrderedDict([('name', 'John'), ('age', 30), ('occupation', 'Engineer')]) ``` **2. `defaultdict`** `defaultdict` 是字典的一个子类,它解决了当我们尝试访问字典中不存在的键时会引发 `KeyError` 的问题。`defaultdict` 在访问不存在的键时,会自动调用一个默认工厂函数,返回一个默认值,这个默认值通常是一个可迭代对象,如列表、集合或字典。这使得插入新键值对变得非常方便。 以下是一个使用 `defaultdict` 的例子,统计多个人员的喜好语言: ```python from collections import defaultdict languages = [('rocky', 'python'), ('snow', 'c'), ('leey', 'java'), ('rocky', 'c++'), ('leey', 'c#')] favourite_languages = defaultdict(list) for name, language in languages: favourite_languages[name].append(language) print(favourite_languages) ``` 输出: ``` defaultdict(<class 'list'>, {'rocky': ['python', 'c++'], 'snow': ['c'], 'leey': ['java', 'c#']}) ``` 在这个例子中,当尝试添加新的名字到 `defaultdict` 时,如果这个名字不存在,`defaultdict` 会自动创建一个空列表作为默认值。因此,我们可以直接通过名字向列表中添加语言,而无需预先检查名字是否已存在于字典中。 对比传统的字典操作,例如: ```python my_dict = {} my_dict['name']['like'] = 'python' ``` 这段代码会导致 `KeyError`,因为尝试访问不存在的键 `'name'`。而在使用 `defaultdict` 时,这种错误就不再出现,因为如果键不存在,它会自动创建一个默认值,如列表或字典。 总结来说,`collections` 模块中的 `namedtuple` 和 `defaultdict` 提供了更为高级和灵活的数据结构,使 Python 开发者能够编写出更加简洁、易读且易于维护的代码。了解并熟练使用这些数据结构,可以显著提升编程效率,解决实际问题时更加得心应手。


























- 粉丝: 6
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- XP-网络故障解决措施全集.doc
- 电气自动化在水利水电工程中的应用分析1.docx
- 时间触发通信:原理与应用
- 基于JSP的教学管理系统大学本科方案设计书.doc
- 基于PLC的物料分拣控制系统的设计.doc
- 实验项目管理-需求书.doc
- 最新高端简约英文版互联网科技金融商务工作计划总结PPT模PPT模板.pptx
- 移动通信技术与计算机网络.docx
- 面翻洪海广告设备有限公司项目管理书.doc
- 电网调度自动化系统的应用.pdf
- 互联网+时代高校线上线下混合式教学模式探究.docx
- 2017级大数据技术与应用专业人才培养方案.doc
- 论网络虚拟财产的民法界定.docx
- 基于 Python 实现自动驾驶的规划与控制代码
- 酒店无线网络覆盖解决方案.docx
- 电子科技16秋《供配电系统监控与自动化》在线作业2-辅导资料.doc


