Create child class of Python dict with modified values

Peter Otten __peter__ at web.de
Mon Aug 9 06:38:52 EDT 2010


dmitrey wrote:

> hi all,
> suppose I have defined a child class of Python dict, currently it
> constructor looks like that:
>     def __init__(self, *args, **kwargs):
>         dict.__init__(self, *args, **kwargs)
>         #(+some more insufficient code)
> 
> Constructor should be capable of calling with either any way Python
> dict is constructed or with a Python dict instance to be derived from;
> calculations speed is important.
> 
> So it works well for now, but I want __init__ to set modified values,
> like this:
> values_of_the_dict = [some_func(elem) for elem in self.values()]
> 
> How this could be done?

>>> class D(dict):
...     def __init__(self, *args, **kw):
...             if args:
...                     args = ((k, v.upper()) for k, v in args[0]),
...             if kw:
...                     for k in kw: kw[k] = 10*kw[k]
...             dict.__init__(self, *args, **kw)
...
>>> D(["ab", "cd"], e="f")
{'a': 'B', 'c': 'D', 'e': 'ffffffffff'}

Replace v.upper() and 10*kw[k] with the appropriate some_func() calls.
Personally I would apply the function before passing the data to the dict 
subclass.

Peter



More information about the Python-list mailing list