String formatting with nested dictionaries

Maric Michaud maric at aristote.info
Thu Aug 24 15:57:21 EDT 2006


Le jeudi 24 août 2006 21:02, Fredrik Lundh a écrit :
> class wrapper:
>      def __init__(self, dict):
>         self.dict = dict
>      def __getitem__(self, key):
>         try:
>             return self.dict[key]
>         except KeyError:
>        

Quite the same idea, but without eval and the need to know the internal dict 
arborescence :

In [242]: class nested_dict_wrapper :
   .....:     def __init__(self, dic) :
   .....:         self._all = [dic] + [nested_dict_wrapper(v) for v in 
dic.values() if isinstance(v, dict)]
   .....:     def __getitem__(self, v) :
   .....:         for i in self._all :
   .....:             try : return i[v]
   .....:             except KeyError: pass
   .....:         raise KeyError(v + ' not found in dict and subdicts')
   .....:
   .....:

In [248]: complex_dict = { '0': 'zero', '1':'one', 'in1' : {'2':'two'}, 'in2':
{'3': 'three', '4' :'four', 'deeper':{'5':'five', '6':'six'}}, '7':'seven' }

In [250]: "%%(%s)s "*7 % tuple(range(7)) % nested_dict_wrapper(complex_dict)
Out[250]: 'zero one two three four five six '

In [251]: "%%(%s)s "*8 % tuple(range(8)) % nested_dict_wrapper(complex_dict)
Out[251]: 'zero one two three four five six seven '

In [252]: "%%(%s)s "*9 % tuple(range(9)) % nested_dict_wrapper(complex_dict)
---------------------------------------------------------------------------
exceptions.KeyError                                  Traceback (most recent 
call last)

/home/maric/<ipython console>

/home/maric/<ipython console> in __getitem__(self, v)

KeyError: '8 not found in dict and subdicts'


-- 
_____________

Maric Michaud
_____________

Aristote - www.aristote.info
3 place des tapis
69004 Lyon
Tel: +33 426 880 097



More information about the Python-list mailing list