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

defaultdictel__missing__()método de se puede anular (como puede ser en cualquier subclase de ladictclase incorporada desde la versión 2.5).No no hay.
La
defaultdictimplementación no se puede configurar para pasar la faltakeya la listadefault_factoryde fábrica. Tu única opción es implementar tu propiadefaultdictsubclase, 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
defaultdictaquí en absoluto. ¿Por qué no usar eldict.setdefaultmé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
defaultdicto cualquier otra alternativa por lo que puedo ver.ETA con respecto a la velocidad de la
inprueba 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álkeynecesitarí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