核心要点
掌握 {}、dict() 多种构造方式
知道键的要求(可哈希)与 dict 保序(3.7+)
熟悉常用操作:get、setdefault、update、推导式
简要回答
dict 用 {} 或 dict() 创建,键须可哈希;Python 3.7+ 保持插入顺序;支持推导式与 fromkeys 等工厂方法。
标准回答
创建方式:
d1 = {"a": 1, "b": 2}
d2 = dict(a=1, b=2)
d3 = dict([("a", 1), ("b", 2)])
d4 = {x: x**2 for x in range(5)} # 推导式
d5 = dict.fromkeys(["a", "b"], 0)键约束:可哈希且不可变——str、int、tuple(元素可哈希)等。
常用 API:
d.get(k, default)安全取值d.setdefault(k, default)d.update(other)/d | other(3.9+ 合并)d.keys()/values()/items()
顺序:3.7+ 官方保证插入顺序;3.6 CPython 已实现。
应用:配置映射、计数(collections.Counter)、JSON 解析 json.loads → dict。
常见误区
⚠️ 常见踩坑
用 list 等不可哈希对象作键会抛 TypeError: unhashable type;用 d[k] 取不存在的键抛 KeyError,需要默认值时用 d.get(k) 或 d.setdefault。另外 dict.fromkeys(keys, []) 让所有键共享同一个 list,改一个会全变——可变默认值应改用 defaultdict(list)。
追问
追问 1:dict.get 和 dict[key] 有什么区别?
d[key] 键不存在时抛 KeyError;d.get(key) 返回 None(或第二参数指定的默认值)不报错。需要「缺失即报错」用 [],需要安全取值或带默认用 get。注意 get 的默认值每次都会求值,别在里面放昂贵调用。
追问 2:defaultdict 解决什么问题?
collections.defaultdict(factory) 在访问不存在的键时自动调用 factory 生成默认值,免去每次 if k not in d 的判断。如 defaultdict(list) 做分组、defaultdict(int) 做计数。注意:仅读取也会创建键,可能意外膨胀字典;纯计数更推荐 Counter。
追问 3:如何合并两个字典?
Python 3.9+ 用 d1 | d2(返回新 dict)或 d1 |= d2(原地更新);旧版用 {d1, d2} 或 d1.update(d2)。键冲突时一律以右侧/后者为准。这些都是浅合并,嵌套子字典不会递归合并。
延伸学习
与本题相关的知识库文章、术语、工具与行业资讯。
📰 AI 资讯