def flatten(data_object, key_name=None): # print('-' * 10) # print(f"data_object = {data_object}, key_name = {key_name}") if type(data_object) == list: for data_line in data_object: # print(f"dl | data_line = {data_line}") # print(f"dl | key_name = {key_name}") # print(f":recursion") flatten(data_line, key_name=key_name) # print(":returned to the stack") elif type(data_object) == dict: for k, v in data_object.items(): # print(f"dd | k, v = {k}, {v}") # print(f"dd | key_name = {key_name}") key_name = f"{key_name}.{k}" if key_name else k # print(f"dd | key_name.k = {key_name}") # print(f":recursion") flatten(v, key_name=key_name) # print(":returned to the stack") # print(f"dd | key_name = {key_name}") key_name = ".".join(key_name.split('.')[:-1]) # print("...back tracking key_name one level") else: print(f"--> {key_name}: {data_object}") if key_name else None # print("<< returning from this run") # print('=' * 10) return