Una clase tiene un constructor que toma un parámetro:
class C(object):
def __init__(self, v):
self.v = v
...
En algún lugar del código, es útil que los valores de un dictado conozcan sus claves.
Quiero usar un defaultdict con la clave pasada a los valores predeterminados recién nacidos:
d = defaultdict(lambda : C(here_i_wish_the_key_to_be))
¿Alguna sugerencia?
python
dictionary
defaultdict
Benjamin Nitlehoo
fuente
fuente
defaultdict
el__missing__()
método de se puede anular (como puede ser en cualquier subclase de ladict
clase incorporada desde la versión 2.5).No no hay.
La
defaultdict
implementación no se puede configurar para pasar la faltakey
a la listadefault_factory
de fábrica. Tu única opción es implementar tu propiadefaultdict
subclase, como lo sugiere @JochenRitzel, arriba.Pero eso no es "inteligente" ni tan limpio como lo sería una solución de biblioteca estándar (si existiera). Por lo tanto, la respuesta a su sucinta pregunta sí / no es claramente "No".
Es una lástima que a la biblioteca estándar le falte una herramienta tan necesaria.
fuente
No creo que necesites estar
defaultdict
aquí en absoluto. ¿Por qué no usar eldict.setdefault
método?Eso, por supuesto, crearía muchos casos de
C
. En caso de que sea un problema, creo que el enfoque más simple servirá:Sería más rápido que el
defaultdict
o cualquier otra alternativa por lo que puedo ver.ETA con respecto a la velocidad de la
in
prueba frente al uso de la cláusula try-except:fuente
d[key]
regresarad[key] = C(key)
sikey not in d
. ¿Pero su solución requiere que él vaya y preestablezca ded[key]
antemano? ¿Cómo sabría cuálkey
necesitaría?Este es un ejemplo funcional de un diccionario que agrega un valor automáticamente. La tarea de demostración para encontrar archivos duplicados en / usr / include. Tenga en cuenta que el diccionario de personalización PathDict solo requiere cuatro líneas:
fuente