I’ve a flat dict with entities. Each entity can have a parent. I’d like to recursively build each entity, considering the parent values.
Logic:
- Each entity inherits defaults from its parent (e.g.
is_mammal
) - Each entity can overwrite the defaults of its parent (e.g.
age
) - Each entity can add new attributes (e.g.
hobby
)
I’m struggling to get it done. Help is appreciated, thanks!
entities = { 'human': { 'is_mammal': True, 'age': None, }, 'man': { 'parent': 'human', 'gender': 'male', }, 'john': { 'parent': 'man', 'age': 20, 'hobby': 'football', } }; def get_character(key): # ... recursive magic with entities ... return entity john = get_character('john') print(john)
Expected output:
{ 'is_mammal': True, # inherited from human 'gender': 'male' # inherited from man 'parent': 'man', 'age': 20, # overwritten 'hobby': 'football', # added }
Advertisement
Answer
def get_character(entities, key): try: entity = get_character(entities, entities[key]['parent']) except KeyError: entity = {} entity.update(entities[key]) return entity