字典对象在 Python 中提供专门的方法,用于安全取值、合并、按缺省创建键、删除与浅拷贝,以及获取键、值与键值对的视图。与列表方法类似,部分方法仅查询,部分会修改原字典。本节按使用频率说明常见接口,并给出对照表。
keys、values、items
keys、values、items 分别返回键、值与 (键, 值) 对的视图。字典随后被修改时,视图内容同步变化,并非创建视图时刻的静态快照:
d = {"a": 1, "b": 2}
print(d.keys()) # dict_keys(['a', 'b'])
print(d.values()) # dict_values([1, 2])
print(d.items()) # dict_items([('a', 1), ('b', 2)])视图不支持下标访问。需要列表或须传给只接受序列的接口时,可使用 list(...) 包装:
print(list(d.keys())) # ['a', 'b']
print(list(d.items())) # [('a', 1), ('b', 2)]get:安全取值
键存在时,方括号与 get 均可取值。键缺失时,方括号抛出 KeyError,get 返回 None 或第二个实参指定的缺省值。读取配置或可选字段时,get 可减少显式分支:
d = {"a": 1}
print(d.get("a")) # 1
print(d.get("x")) # None
print(d.get("x", 0)) # 0update:合并字典
update 将另一映射中的键值写入当前字典,同名键以传入侧为准,原字典被就地修改。若须得到合并结果而不修改原对象,自 Python 3.9 起可使用 | 生成新字典:
a = {"x": 1, "y": 2}
b = {"y": 100, "z": 3}
a.update(b)
print(a) # {'x': 1, 'y': 100, 'z': 3}
# Python 3.9+
# merged = {"x": 1, "y": 2} | {"y": 100, "z": 3}
setdefault:有则取、无则设
setdefault(key, default) 在键已存在时返回原值,不存在时写入 default 并返回该值。计数与按键分组时常与 get 配合或替代手动判断:
counts = {}
for word in ["apple", "banana", "apple"]:
counts[word] = counts.get(word, 0) + 1
print(counts) # {'apple': 2, 'banana': 1}
counts2 = {}
for word in ["a", "b", "a"]:
counts2.setdefault(word, 0)
counts2[word] += 1
print(counts2) # {'a': 2, 'b': 1}嵌套字典中可先 setdefault(key, []) 或 setdefault(key, {}),再向返回的容器写入,以避免重复检测键是否存在。
pop、popitem、clear
pop(key) 删除指定键并返回值,可提供缺省实参以免键不存在时抛错。popitem 删除并返回最后插入的键值对(自 3.7 起字典保序)。clear 删除全部条目,字典对象仍存在:
d = {"a": 1, "b": 2, "c": 3}
print(d.pop("a")) # 1
print(d) # {'b': 2, 'c': 3}
print(d.popitem()) # ('c', 3)
print(d) # {'b': 2}
d.clear()
print(d) # {}copy:复制字典
b = a 仅增加对同一字典的引用,修改 b 即修改 a。copy() 为浅拷贝:顶层键互不影响,但若值为列表或嵌套字典,两侧仍共享同一内部对象。仅当修改顶层键的绑定(如 b["y"] = 2)时,原字典可保持不变:
a = {"x": 1}
b = a.copy()
b["y"] = 2
print(a, b) # {'x': 1} {'x': 1, 'y': 2}若值内含可变对象且须完全断开共享,应使用标准库 copy.deepcopy,与字典自带的 copy() 层次不同。
常用方法总表
| 方法 | 作用 |
|---|---|
keys() / values() / items() | 键 / 值 / 键值对视图 |
get(key, default) | 安全取值,避免 KeyError |
update(other) | 合并进当前字典,同键覆盖 |
setdefault(key, default) | 有则取、无则写入缺省 |
pop(key, default) | 删除并返回,可带缺省 |
popitem() | 删除并返回最后一项 |
clear() | 清空 |
copy() | 浅拷贝 |
读可选字段常用 get,合并配置常用 update 或 |,按键累计常用 setdefault 或 get,遍历键值常用 items,上述接口覆盖多数日常用法。
本节归纳了 Python 字典对象的常用方法及视图语义。下一篇介绍函数:def 定义、调用与返回值。