from collections import namedtuple def literalstruct(name, **kv): o = type(name, (), {})() o.__dict__.update(kv) return o Animal = namedtuple('Animal', [ 'species', 'name', 'call' ]) Facility = namedtuple('Facility', [ 'director', 'phone', 'animals' ]) def bark(): return "barks and jumps" def meow(): return "meow" City = literalstruct('City', zoo = Facility( 'Vasiliy Pupkin', '111-22-33', [ Animal('dog', 'Spotty', bark), Animal('dog', 'Fido', bark) ] ), circus = Facility( 'John Jackson', '111-37-13', [ Animal('cat', 'Mittens', meow) ] ) ) def everyone(group): for a in group: print("%s: %s" % (a.name, a.call())) everyone(City.zoo.animals) everyone(City.circus.animals)