2010-11-10 16 views

Respuesta

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

Aquí es otro aplicación usando la expresión lambda (de Kindall):

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

o 'una = defaultdict (lambda: 1) ' – kindall

1

A partir de los documentos:

La función int(), que siempre devuelve cero es simplemente un caso especial de funciones constantes. Una forma más rápida y más flexible para crear funciones constantes es utilizar itertools.repeat() que puede suministrar cualquier valor constante (no sólo cero):

>>> 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

Sucedí haber leído eso en los documentos recientemente y no podía creer que sugirieran usar' itertools.repeat() 'cuando un' lambda' trivial como @gnibbler sugiere que funciona igual de bien, es más simple, y conlleva mucho menos sobrecarga - hablar sobre overkill ... – martineau

+0

Sí, no estoy seguro. Tal vez haya una ganancia de rendimiento, la probaré más tarde – Falmarri

+0

Estoy feliz de ver una alternativa sin lambda. – dividebyzero

4
defaultdict(lambda: 1) 

por ejemplo

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