Is this possible with less traversing through the original_dict?
You could flatten out the dictionary recursively:
def flatten(aDict, output=None):
if output is None:
output = {}
for key in aDict:
if isinstance(aDict[key], dict):
flatten(aDict[key], output)
output[key] = aDict[key]
return output
Now it is easy to get keys at any level.
final_output = {}
flat_dict = flatten(original_dict)
for key in needed_keys:
for k in flat_dict:
if k.endswith(key):
final_output[key] = flat_dict[k]
break
if not key in final_output:
final_output[key] = None