from collections import OrderedDict
def recursive_test(leaf, fn):
if isinstance(leaf, list):
if fn(leaf[0]):
return leaf
else:
return None
else:
_leaf = {}
try:
for key, val in leaf.items():
cur_leaf = recursive_test(val, fn)
if cur_leaf:
_leaf[key] = cur_leaf
return _leaf or None
except AttributeError:
if fn(leaf):
return leaf
a = {
'a': None,
'b': 4,
'c': {
'd': None,
'e': "test",
'f': {
'g': 1,
'h': None
}
}
}
print(recursive_test(a, lambda x: x is not None))