def data2single_dict(source):
stack = [(source, "")]
result = {}
while stack:
obj, parent_name = stack.pop()
if isinstance(obj, dict):
for k, v in obj.items():
column_name = f"{parent_name}.{k}" if parent_name else k
stack.append((v, column_name))
elif isinstance(obj, list) or isinstance(obj, tuple):
for i, v in enumerate(obj):
column_name = f"{parent_name}.{i}" if parent_name else f"{i}"
stack.append((v, column_name))
else:
result[parent_name] = obj
return result
data1 = {
"a": {
"b": {
"c": 1
},
"d": 2
},
"e": 3
}
data2 = {
"a": {
"b": {
"c": [1, 2, 3]
},
"d": [4, 5, 6]
},
"e": [7, 8, 9],
"f": 10
}
data3 = [{
"a": {"b": "c"},
"d": [1, 2, 3],
"f": [{"g": 4}, "5", 6]
}]
data4 = [{
"a": {"b": "c"},
"d": [[-1, -2], 2, 3],
"f": [{"g": 4}, "5", 6]
}]
print(data2single_dict(data1))
print(data2single_dict(data2))
print(data2single_dict(data3))
print(data2single_dict(data4))