2010-11-10 60 views

回答

14
>>> def f(): 
     return 1 
>>> a = defaultdict(f) 
>>> a[1] 
1 

下面是使用lambda表达式的其它实现(从kindall):

>>> a = defaultdict(lambda: 1) 
+11

或'一个= defaultdict(lambda:1)' – kindall 2010-11-10 00:13:10

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>' 
+2

我碰巧在最近的文档中已经读过,并且无法相信他们在使用'itertools.repeat()'的时候会建议使用'lambda'作为@gnibbler的建议。更简单,并且需要很少的开销 - 谈论矫枉过正... – martineau 2010-11-10 01:14:52

+0

是的,我不确定。也许有一个性能增益,我会稍后测试 – Falmarri 2010-11-10 18:09:31

+0

我很高兴看到一个无lambda替代方案。 – dividebyzero 2013-03-03 01:37:52

4
defaultdict(lambda: 1) 

例如

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