defaultdict
自动初始化字典值
defaultdict 是 CoddyKit 上的免费 Python Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Python Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Python Academy 课程共包含 4 节课。
缺少键的问题
对于普通 dict,访问不存在的键会引发 KeyError。当您想逐步累积值时,这会很麻烦。
d = {}
try:
d['x'].append(1)
except KeyError as e:
print('KeyError:', e)使用默认字典
collections 中的 defaultdict 接受一个工厂函数,为任何缺少的键生成默认值。请使用 from collections import defaultdict 导入它。
from collections import defaultdict
d = defaultdict(int)
print(d['missing'])
print(dict(d))使用 int 进行计数
使用 defaultdict(int) 时,缺少的键默认值为 0,因此您无需先检查就可以递增计数。
from collections import defaultdict
counts = defaultdict(int)
for ch in 'banana':
counts[ch] += 1
print(dict(counts))使用 list 进行分组
defaultdict(list) 会为新键创建空列表,非常适合将项目分组到各个桶中。
from collections import defaultdict
groups = defaultdict(list)
words = ['apple', 'ant', 'bee', 'bear']
for w in words:
groups[w[0]].append(w)
print(dict(groups))使用 set 收集项目
当您希望每个键对应唯一值时,请使用 defaultdict(set)。重复值会被自动删除。
from collections import defaultdict
seen = defaultdict(set)
pairs = [('a', 1), ('a', 1), ('a', 2), ('b', 3)]
for k, v in pairs:
seen[k].add(v)
print(dict(seen))工厂必须是可调用对象
该参数是一个无需参数即可调用并返回默认值的对象。int、list、set 和 dict 都可以使用,因为调用它们会返回空值。
from collections import defaultdict
print(int())
print(list())
print(set())使用 lambda 设置自定义默认值
您可以提供任何不带参数的可调用对象,例如 lambda,以返回自定义默认值。
from collections import defaultdict
scores = defaultdict(lambda: 100)
print(scores['new_player'])
scores['alice'] -= 10
print(dict(scores))嵌套默认字典
工厂本身可以创建一个 defaultdict,让您无需手动设置就能构建嵌套结构。
from collections import defaultdict
table = defaultdict(lambda: defaultdict(int))
table['fruit']['apples'] += 3
table['fruit']['pears'] += 2
print(table['fruit']['apples'])
print(table['fruit']['pears'])访问会创建键
请注意:仅仅读取缺少的键,就会使用默认值插入该键。访问之后,该键便存在于字典中。
from collections import defaultdict
d = defaultdict(int)
_ = d['ghost']
print('ghost' in d)
print(dict(d))检查键而不插入
若要检查键而不创建它,请使用 .get() 方法或 in 运算符,它们都不会触发工厂。
from collections import defaultdict
d = defaultdict(int)
print(d.get('safe', 'default'))
print('safe' in d)
print(dict(d))转换回字典
如果您想得到普通字典,请将 defaultdict 包装在 dict() 中,例如在从函数返回它或整洁地打印它之前。
from collections import defaultdict
dd = defaultdict(list)
dd['a'].append(1)
plain = dict(dd)
print(type(plain))
print(plain)快速检查
传给 defaultdict 的参数表示什么?
回顾:默认字典
要点:
defaultdict(factory)会自动为缺少的键创建值。int提供 0(用于计数),list提供 [](用于分组),set提供空集合(用于唯一值分组)。- 工厂可以是任何不带参数的可调用对象,包括
lambda。 - 读取缺少的键会插入该键;请使用
.get()或in安全地查看键。
from collections import defaultdict
g = defaultdict(list)
for w in ['cat', 'cow', 'dog']:
g[w[0]].append(w)
print(dict(g))用 AI 导师学习 Python — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 76
- 课程
- 320
常见问题解答
「defaultdict」课时是免费的吗?
是的 — 「defaultdict」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Python Academy 课程的其余内容,请升级到 CoddyKit PRO。 Python Academy 课程共包含 4 节课。
「defaultdict」这节课中我会学到什么?
自动初始化字典值 你通过在浏览器中直接运行的动手代码来练习 Python Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Python Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Python Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「defaultdict」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Python Academy 课中编写并运行代码吗?
能。每节 Python Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Counter
- defaultdict
- deque
- namedtuple 与 OrderedDict