带参数的defaultdict类构造函数
[Python 3.1]
我想要一个 defaultdict(int)
,不过我希望默认值是 1
而不是 0
。
- 有没有什么简单的方法可以做到这一点?
- 我应该这样做吗?
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):