Python3 字典
Python3 学习笔记 · 整理自菜鸟教程
一句话
字典(dict)是键值对(key-value)的无序/有序映射,用 {} 定义,键必须可哈希且唯一,3.7+ 按插入顺序迭代。
要点
- 键值对:键唯一、不可变且可哈希(str、int、tuple 等);值任意类型。
- 键重复:后写的覆盖先写的,只保留最后一个。
- 查找 O(1):基于哈希表,平均常数时间;
d[key]找不到报KeyError。 - 安全取值:用
get(key, default)避免 KeyError。 - 遍历:
d.keys()/d.values()/d.items(),或用for k, v in d.items()。 - 3.7+ 有序:按插入顺序保留,
3.6是 CPython 实现细节,3.7起为语言保证。 - 可变:可增删改键值对;
del、pop、popitem、clear删除。
语法 / 常用方法
| 语法/方法 | 说明 | 示例 |
|---|---|---|
d = {"a": 1} |
定义字典 | dict(a=1) 也可 |
d[k] |
取键 k 的值 | 键不存在报 KeyError |
d[k] = v |
新增 / 修改 | 键在则覆盖 |
d.get(k[, default]) |
安全取值,无则返回 default | d.get("x", 0) |
d.keys() |
返回所有键的视图 | list(d.keys()) |
d.values() |
返回所有值的视图 | — |
d.items() |
返回 (键, 值) 视图 | for k,v in d.items() |
d.pop(k[, default]) |
删除并返回值 | 无键且无默认报错 |
d.popitem() |
删除并返回最后一个键值对 | LIFO 顺序 |
d.setdefault(k, v) |
键存在返回值,否则插入 v 并返回 v | 常用初始化 |
d.update(other) |
用另一字典/键值对更新 | 覆盖同名键 |
d.clear() |
清空 | → {} |
d.copy() |
浅拷贝 | 独立顶层 |
dict.fromkeys(keys, v) |
由键序列建字典,值默认 None | dict.fromkeys("ab", 0) |
k in d / k not in d |
键是否存在 | 判断用这个,别用 values |
len(d) |
键值对个数 | — |
del d[k] |
删除键(语句) | 越界报 KeyError |
d1 | d2 / d1.update(d2) |
合并字典(3.9+ |) |
返回新字典 |
代码示例
1 | |
易错点
d[key]找不到报 KeyError:不确定时用get()或先in判断。- 键必须可哈希:列表、字典不能作键,元组可以(元素须可哈希)。
d.keys()等返回视图不是列表:要列表用list(d.keys());视图会随字典变动。- 直接赋值是别名:
d2 = d共享同一字典,改一个两个都变;用d.copy()。 copy()是浅拷贝:嵌套字典仍共享内层。- 遍历时改字典报错:
for k in d:中增删键抛RuntimeError,先收集键再改。 in判断的是键:1 in {1: "a"}是 True;判断值要1 in d.values()。- 自动补全记忆:
d[k] = d.get(k, 0) + 1是计数惯用法。