resueltos recorrer lista elementos ejercicios diccionarios diccionario dentro convertir anidados agregar python dictionary defaultdict

recorrer - lista de diccionarios python



¿Diccionario de Python que por defecto es clave? (4)

Es probable que tenga que escribir su propia clase que herede de (o es similar a) defaultdict y anular el método __getitem__ .

¿Hay alguna forma de obtener un código predeterminado para devolver la clave de forma predeterminada? ¿O alguna estructura de datos con comportamiento equivalente? Es decir, después de inicializar el diccionario d ,

>>> d[''a''] = 1 >>> d[''a''] 1 >>> d[''b''] ''b'' >>> d[''c''] ''c''

Solo he visto que los diccionarios predeterminados toman funciones que no toman parámetros, así que no estoy seguro de que exista una solución que no sea la creación de un nuevo tipo de diccionario.


Si no desea crear una subclase de dictado, puede intentar usar

d.get(''a'', ''a'') d.get(''b'', ''b'') d.get(''c'', ''c'')

Lo cual creo que es más claro y menos mágico para este propósito.

Si eres un fanático DRY y solo tienes claves de char, puedes hacer esto :)

d.get(*''a''*2) d.get(*''b''*2) d.get(*''c''*2)


__missing__ método __missing__ de dict :

>>> class MyDefaultDict(dict): ... def __missing__(self, key): ... self[key] = key ... return key ... >>> d = MyDefaultDict() >>> d[''joe''] ''joe'' >>> d {''joe'': ''joe''}


Edición: ¡ Uy, me acabo de dar cuenta de que el código de mi archivo originalmente provenía de otra respuesta de ! https://.com/a/2912455/456876 , subir ese voto.

Esto es lo que uso: es una variante predeterminada que pasa la clave como un argumento a la función de fábrica de valor predeterminado que se pasa como un argumento a init , en lugar de ningún argumento:

class keybased_defaultdict(defaultdict): def __missing__(self, key): if self.default_factory is None: raise KeyError(key) else: value = self[key] = self.default_factory(key) return value

Este es el uso que quieres:

>>> d = keybased_defaultdict(lambda x: x) >>> d[1] 1 >>> d[''a''] ''a''

Otras posibilidades:

>>> d = keybased_defaultdict(lambda x: len(x)) >>> d[''a''] 1 >>> d[''abc''] 3