So I have a dictionary:
{\'a\': {\'b\': {\'c\': \'d\', \'e\': \'f\'}}}
I need to create a dictionary as follows:
{\'c\':\'d\',
Use yield from with your recursive call, otherwise you are just ignoring the result of the recursive call:
def boil_down_array(key, data):
if type(data) == dict:
for key, item in data.items():
yield from boil_down_array(key, item)
else:
yield {key: data}
This is only available in Python > 3.3, but essentially just a short hand for simply yielding from an extra loop:
for key, item in data.items():
for x in boil_down_array(key, item): # just exhaust the recursive generator
yield x # and "re-yield" what it produces
In order to achieve your desired data structure, you might be better off yielding pairs instead of dicts, so you can transform the result more easily to the resulting dict:
yield key, data
Then you can use it like:
result = dict(boil_down_array(None, input_dict))
An even simpler recursive approach will just return a complete dict:
def boil_down_nested(dct):
result = {}
for k, v in dct.items():
if isinstance(v, dict):
result.update(boil_down_nested(v))
else:
result[k] = v
return result