带参数的defaultdict类构造函数

8 投票
4 回答
6106 浏览
提问于 2025-04-16 06:49

[Python 3.1]

我想要一个 defaultdict(int),不过我希望默认值是 1 而不是 0

  1. 有没有什么简单的方法可以做到这一点?
  2. 我应该这样做吗?

4 个回答

1

根据文档的说明:

int()这个函数总是返回零,它其实是常量函数的一种特殊情况。要创建常量函数,有一种更快、更灵活的方法,就是使用itertools.repeat(),这个方法可以提供任何常量值(不仅仅是零):

>>> def constant_factory(value):
...     return itertools.repeat(value).next
>>> d = defaultdict(constant_factory('<missing>'))
>>> d.update(name='John', action='ran')
>>> '%(name)s %(action)s to %(object)s' % d
'John ran to <missing>'
4
defaultdict(lambda: 1)

例如

>>> from collections import defaultdict
>>> a = defaultdict(lambda: 1)
>>> a["foo"] += 1
>>> a["foo"]
2
15
>>> def f():
        return 1
>>> a = defaultdict(f)
>>> a[1]
1
>>> a = defaultdict(lambda: 1)

这里有一个使用 lambda 表达式的其他实现(来自 kindall):

撰写回答