有没有理由使用dict而不是defaultdict?

时间:2013-10-29 18:52:43

标签: python dictionary

标题说明了一切:

有没有理由使用dict代替defaultdict

我能想到的唯一原因是“我真的不需要它”。但后来我可以问一下,为什么dict不会被defaultdict取代。

可能的原因可能是:

  • 表现不佳
  • 测试

但我不认为性能损失是如此糟糕,因为您只需检查是否已存在一个新值,该值在O(1)中摊销。

我也想不出测试可能会变得更加困难的例子。 (但我不是很有经验)

1 个答案:

答案 0 :(得分:9)

使用defaultdict的原因很多:

  • 如果您的值不均匀,因此无法通过简单的工厂函数生成。
  • 如果您需要缺少密钥来引发异常,而不是自动为您创建新值。
  • 如果所有默认值都需要比工厂函数接收的更多上下文;例如,工厂功能无法访问要插入的密钥。

defaultdict填充了一个专门的用例,当缺少某个键时,想要值为您自动创建,并且这些值可以使用工厂函数生成访问要插入的密钥。

请注意,异常只是为了标记程序员错误。异常是Python语言中非常强大的一部分,它不仅仅是编码错误。如果您的数据通常不需要新密钥,那么使用异常处理(请求宽恕)比每次测试密钥更快(请求许可)。

在Progammers上查看Python Forgiveness vs. Permission and Duck Typing以进行比较。