【Python 高频 API 速学 ⑤】
一、为什么把字典和集合放同一篇?
• 底层都是哈希表,API 设计高度对称。
• 日常任务无非「读-写-去重-集合运算」,这 5 个方法就能打穿。
二、三件套 & 二板斧一览
名称 | 作用 | 返回值 | 原地? |
---|---|---|---|
dict.get(key, default) | 安全读取 | 值或 default | ❌ |
dict.setdefault(k, v) | 读不到就写入 | 值(新或旧) | ✅ |
dict.items() | 同时遍历 k-v | 可迭代视图 | ❌ |
set.add(elem) | 把元素扔进去 | None | ✅ |
set.union(other) | 合并两个集合 | 新集合 | ❌ |
三、一行代码场景秀
- 统计词频,一行搞定缺省值
freq = {}
for w in words:freq[w] = freq.get(w, 0) + 1 # 或 freq.setdefault(w, 0)
- 构造「默认值是列表」的分组字典
groups = {}
for tag, obj in items:groups.setdefault(tag, []).append(obj)
- 同时遍历键值,不再手写
for k in d:
for k, v in user.items():print(k, v.upper())
- 去重并保持插入顺序(3.7+ 字典有序)
unique = list(dict.fromkeys(seq))
- 合并两个标签集合
all_tags = tag_set_a.union(tag_set_b) # 或 tag_set_a | tag_set_b
- 实时黑名单过滤
blocked = {'spam', 'ad'}
msg = [w for w in tokens if w not in blocked]
四、mini 实战:5 行代码实现「购物车合并」
需求:把多份购物车 dict 合并,同商品数量相加。
from collections import Counter
cart1 = {'apple': 3, 'banana': 1}
cart2 = {'apple': 2, 'pear': 5}merged = Counter(cart1)
for k, v in cart2.items():merged[k] = merged.get(k, 0) + vprint(dict(merged)) # {'apple': 5, 'banana': 1, 'pear': 5}
核心动作拆解:
• items()
遍历键值
• get()
安全读取旧值
• 结果转回普通 dict(如需 JSON 序列化)
五、记忆口令
“字典三件套:get 读,setdefault 写,items 走; 集合两把刀:add 去重,union 合。”