

















Python 3 中的 dict(字典)是一种无序(严格说是 Python 3.7+ 插入有序)、可变、键值对(Key-Value)的映射容器类型。它是 Python 最核心、最强大的数据结构之一,底层基于哈希表实现,平均时间复杂度为 O(1)。
以下是 Python 3 中 dict 的全面解析,重点标注了 Python 3 独有的新特性:
dict 正式保证会记住键值对的插入顺序(在此之前 3.6 仅为 CPython 实现细节)。遍历字典时,顺序与插入时一致。int、str、tuple),因为需要计算哈希值。list、set 或 dict 本身不能作为键。# 方式一:花括号
d1 = {'name': 'Alice', 'age': 30}
# 方式二:dict() 构造函数(键名不加引号)
d2 = dict(name='Bob', age=25)
# 方式三:键值对列表(适用于动态构建)
d3 = dict([('a', 1), ('b', 2)])
# 方式四:字典推导式(Python 3 特色)
squares = {x: x**2 for x in range(5)} # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
# 方式五:fromkeys 创建默认值字典
d4 = dict.fromkeys(['x', 'y'], 0) # {'x': 0, 'y': 0}
| 操作 | 代码示例 | 说明 |
|---|---|---|
| 增加/修改 | d['key'] = 'value' |
键存在则覆盖,不存在则新增 |
| 安全取值 | d.get('key', '默认值') |
键不存在返回 None 或指定默认值,不抛异常 |
| 强制取值 | d['missing'] |
键不存在会抛出 KeyError |
| 设置默认 | d.setdefault('x', []) |
若键存在返回值,若不存在则插入该键并返回默认值 |
| 删除 | del d['key'] |
删除键值对(不存在抛 KeyError) |
| 安全弹出 | value = d.pop('key', None) |
删除并返回值,若不存在返回默认值不抛异常 |
| 弹出末尾项 | d.popitem() |
删除并返回最后插入的键值对(LIFO 后进先出) |
| 合并更新 | d.update({'a': 1}) |
合并另一个字典或可迭代对象到当前字典 |
Python 3.9 引入了更优雅的字典合并语法:
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
# 合并(生成新字典):b 的值被 dict2 覆盖
merged = dict1 | dict2 # {'a': 1, 'b': 3, 'c': 4}
# 原地更新(修改 dict1)
dict1 |= dict2 # dict1 现在变为 {'a': 1, 'b': 3, 'c': 4}
d = {'name': 'Tom', 'age': 18}
# 遍历键(默认)
for key in d:
print(key)
# 遍历值
for value in d.values():
print(value)
# 遍历键值对(推荐,解包)
for key, value in d.items():
print(key, value)
d.keys()、d.values()、d.items() 返回的是视图,而非复制列表。视图会动态反映字典的修改,且支持集合运算(针对 keys 和 items):
keys = d.keys()
d['new'] = 100
print(keys) # 视图自动包含了 'new'
# 集合操作(取交集)
d1 = {'a': 1, 'b': 2}
d2 = {'b': 3, 'c': 4}
print(d1.keys() & d2.keys()) # {'b'}
Python 3.6+ 重新设计了字典底层结构(称为 Compact Dict),使得字典在内存占用上比 Python 2 减少了约 20% 到 25%,且迭代速度更快。
sorted(d.items()) 构建新字典。< > 比较大小,但支持 == 和 !=(无视顺序,仅比较内容)。collections 模块更强大虽然属于标准库,但在实际开发中常与 dict 配合:
defaultdict:当键不存在时,自动调用工厂函数生成默认值(避免 setdefault)。from collections import defaultdict
dd = defaultdict(list)
dd['a'].append(1) # 无需判断键是否存在
OrderedDict:虽然普通 dict 已有序,但 OrderedDict 额外提供了 move_to_end 等重排序方法,在 Python 3 中仍有其特定用途。总结一句话:Python 3 的 dict 是集有序性、高性能哈希查找和内存紧凑于一身的全能键值对容器,配合 3.9 的 | 运算符和 3.7+ 的有序特性,彻底让它成为了开发者首选的无脑映射工具。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。