数据转单层字典

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))

  

posted @ 2023-04-08 00:31  NAVYSUMMER  阅读(12)  评论(0)    收藏  举报
交流群 编程书籍