【问题标题】:Python defaultdict behaviourPython 默认字典行为
【发布时间】:2021-12-20 08:32:38
【问题描述】:

我今天遇到了一些让我有点吃惊的行为。

from collections import defaultdict
d = defaultdict(lambda: "test")

现在d[0]按预期返回"test",但d.get(0)实际上返回None。这是预期的行为吗?

【问题讨论】:

标签: python defaultdict


【解决方案1】:

是的,这是意料之中的。除了mydict[x]所有其他方法的工作方式与常规dict 完全相同。来自documentation

返回一个新的类字典对象。 defaultdict 是 内置字典类。它覆盖了一种方法并添加了一种可写方法 实例变量。其余功能与 dict 类,此处未记录。

它覆盖的方法是__missing__,并进一步阐述:

这个方法被dict类的__getitem__()方法调用 当未找到请求的密钥时;无论它返回或引发的是 然后由__getitem__()返回或提出。

注意__missing__() 不会被调用来执行任何操作,除了 __getitem__()。这意味着 get() 将像普通字典一样返回 None 作为默认值,而不是使用 default_factory。

添加了重点。

【讨论】:

    【解决方案2】:

    是的,这是预期的 documented 行为(强调原文):

    请注意,除了__getitem__() 之外的任何操作调用__missing__()。这意味着get() 将像普通字典一样返回None 作为默认值,而不是使用default_factory

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 2021-07-27
      • 2019-08-11
      • 2016-01-28
      • 1970-01-01
      • 2016-06-25
      相关资源
      最近更新 更多