Si bien mi respuesta original perdió el punto (al tratar de resolver este problema con la solución para acceder a la clave en la fábrica de defaultdict), la he reelaborado para proponer una solución real a la presente pregunta.
Aquí está:
class walkableDict(dict):
def walk(self, callback):
try:
for key in self:
self[key] = callback(self[key])
except TypeError:
return False
return True
Uso:
>>> d = walkableDict({ k1: v1, k2: v2 ... })
>>> d.walk(f)
La idea es subclasificar el dict original para darle la funcionalidad deseada: «mapear» una función sobre todos los valores.
El punto positivo es que este diccionario se puede utilizar para almacenar los datos originales como si fuera un dict
, mientras transforma cualquier dato a pedido con una devolución de llamada.
Por supuesto, siéntase libre de nombrar la clase y la función de la manera que desee (el nombre elegido en esta respuesta está inspirado en PHP array_walk()
función).
Nota: Ni el try
–except
bloque ni el return
Las declaraciones son obligatorias para la funcionalidad, están ahí para imitar aún más el comportamiento de PHP array_walk
.