Другая версия:
d2={'a':'b', 'c':['d',{'e':'f'}], 'g':['h','i']}
def flatten(d):
if isinstance(d, dict):
for k, v in d.items():
yield k
yield from flatten(v)
elif isinstance(d, list):
for v in d:
yield from flatten(v)
else:
yield d
out = [*flatten(d2)]
print(out)
Распечатывает:
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']