2010-11-10 58 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