Playing with dictionaries

Peter Otten __peter__ at web.de
Mon Sep 22 15:04:43 EDT 2003


Roberto A. F. De Almeida wrote:

> Suppose I have a dictionary containg nested dictionaries. Something
> like this:
> 
>>>> pprint.pprint(dataset)
> {'casts': {'experimenter': None,
>            'location': {'latitude': None,
>                         'longitude': None},
>            'time': None,
>            'xbt': {'depth': None,
>                    'temperature': None}},
>  'catalog_number': None,
>  'z': {'array': {'z': None},
>        'maps': {'lat': None,
>                 'lon': None}}}
> 
> I want to assign to the values in the dictionary the hierarchy of keys
> to it. For example:
> 
>>>> dataset['casts']['experimenter'] = 'casts.experimenter'
>>>> dataset['z']['array']['z'] = 'z.array.z'
> 
> Of course I would like to do this automatically, independent of the
> structure of the dictionary. Is there an easy way to do it?

class Dict:
    def __init__(self, name=None, parent=None):
        self.name = name
        self.parent = parent
    def __getitem__(self, name):
        return Dict(name, self)
    def __str__(self):
        if self.parent and self.parent.parent:
            return ".".join((str(self.parent), self.name))
        elif self.name is not None:
            return self.name
        return "I warned you"


d = Dict()
print d['casts']
print d['casts']['experimenter']
print d['casts']['location']['latitude']
#print d # do not uncomment

Seems to work :-)
I doubt that anybody can come up with something more automatic or more
independent of the structure of the dictionary than the above. And it was
easy, too, wasn't it?

Peter





More information about the Python-list mailing list