Python Mapping类型介绍(Mapping抽象接口、Mapping接口、__getitem__、__iter__、defaultdict、OrderedDict、ChainMap)
文章目录
Python Mapping 类型详解
在 Python 的数据模型中,Mapping(映射)类型是一类用于存储“键—值”(key-value)关系的数据结构。它允许通过唯一的键快速访问对应的值,是构建配置、索引、缓存等场景的核心工具。
最常见的 Mapping 类型是内置的 dict(字典),此外,标准库中还提供了多种扩展映射类型,以适应不同需求。
一、Mapping 类型的基本概念
Mapping 类型的核心特征包括:
- 键唯一(Key Uniqueness):每个键在映射中只能出现一次
- 键可哈希(Hashable):键必须是不可变对象,如
int、str、tuple - 值可任意(Value Flexibility):值可以是任意类型
- 无序或有序(视实现而定):Python 3.7+ 中
dict保持插入顺序
从抽象角度来看,Mapping 类似数学中的函数:
key → value
二、内置 Mapping 类型:dict
1. 创建字典
# 使用字面量
d = {"name": "Alice", "age": 25}
# 使用 dict 构造函数
d = dict(name="Alice", age=25)
# 从键值对序列创建
d = dict([("name", "Alice"), ("age", 25)])
2. 访问与修改
d["name"] # 获取值
d["age"] = 26 # 修改值
d["city"] = "NY" # 添加新键值对
若访问不存在的键会抛出异常:
d["salary"] # KeyError
推荐使用:
d.get("salary", 0) # 返回默认值 0
3. 常用方法
d.keys() # 返回所有键
d.values() # 返回所有值
d.items() # 返回键值对
d.pop("age") # 删除并返回值
d.update({"age": 30}) # 更新字典
4. 遍历字典
for key, value in d.items():
print(key, value)
三、Mapping 的抽象基类
Python 在 collections.abc 模块中定义了 Mapping 的抽象接口:
from collections.abc import Mapping
一个对象若实现以下方法,即可视为 Mapping:
__getitem__(self, key)__iter__(self)__len__(self)
这使得开发者可以自定义映射类型。
四、标准库中的其他 Mapping 类型
1. defaultdict
from collections import defaultdict
d = defaultdict(int)
d["count"] += 1 # 自动初始化为 0
适用于计数、分组等场景。
2. OrderedDict
from collections import OrderedDict
在 Python 3.7 之前用于保持插入顺序;现在更多用于特殊排序控制。
3. ChainMap
from collections import ChainMap
a = {"x": 1}
b = {"y": 2}
c = ChainMap(a, b)
用于将多个字典视为一个整体(如作用域查找)。
4. MappingProxyType
from types import MappingProxyType
d = {"a": 1}
proxy = MappingProxyType(d)
提供字典的只读视图。
五、Mapping 的底层实现(dict)
Python 的 dict 基于哈希表(Hash Table) 实现,其核心机制:
- 对 key 计算哈希值:
hash(key) - 根据哈希定位存储位置
- 通过冲突解决(如开放寻址)保证查找效率
其平均时间复杂度:
| 操作 | 时间复杂度 |
|---|---|
| 查找 | O(1) |
| 插入 | O(1) |
| 删除 | O(1) |
六、使用建议与最佳实践
1. 使用不可变对象作为键
# 推荐
d[(1, 2)] = "point"
# 不推荐
d[[1, 2]] = "point" # TypeError
2. 优先使用 get 避免异常
value = d.get("key", default)
3. 使用字典推导式
squares = {x: x*x for x in range(5)}
4. 合并字典(Python 3.9+)
d3 = d1 | d2
七、总结
Mapping 类型是 Python 中最核心的数据结构之一,其代表 dict 以高效的哈希表实现提供了快速的数据访问能力。通过标准库中的扩展类型(如 defaultdict、ChainMap 等),可以灵活应对不同应用场景。
掌握 Mapping 的使用不仅有助于写出更高效的代码,也能提升程序的结构化和可维护性。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)