数组转树结构

Posted by Shallow Dreamer on September 12, 2023
def build_tree(datalist, proplist):
    tree = []  # 存储树结构的列表

    for data in datalist:
        parts = data.split('>->')  # 根据'>->'分割数据
        label = parts[-1]  # 最后一个部分作为label
        prop = proplist[datalist.index(data)]
        # 检查当前部分是否已经在树中
        node = None
        for item in tree:
            if item['label'] == parts[0]:
                node = item
                break

        if node is None:
            # 如果当前部分不在树中,则创建一个新节点
            node = {'label': parts[0]}
            tree.append(node)

        # 递归处理子节点
        if len(parts) > 1:
            if 'children' not in node:
                node['children'] = []
            node['children'].append({'label': label, 'prop': prop})
        else:
            node['prop'] = prop

    return tree

    def transform_to_nested_dict(labels, props):
        data = []
        mapping = {}

        for label, prop in zip(labels, props):
            parts = label.split('>->')
            current_level = data

            for part in parts:
                label_dict = {"label": part}
                if part not in mapping:
                    mapping[part] = len(current_level)
                    current_level.append(label_dict)
                else:
                    current_level_index = mapping[part]
                    label_dict = current_level[current_level_index]

                current_level = label_dict.setdefault("children", [])

            if prop:
                label_dict["prop"] = prop

        return data


    labels = ['1>->11', '2>->21', '2>->22>->221', '3>->31>->311>->3111']
    props = ['a', 'b', 'c', 'd']

    result = transform_to_nested_dict(labels, props)
    print(result)
    def transform_lists_to_structure(list1, list2):
        result = []
        mapping = {}

        for item1, item2 in zip(list1, list2):
            parts1 = item1.split('>->')
            current_level = result
            for part in parts1:
                key = part
                if key not in mapping:
                    mapping[key] = {"label": key}
                    if len(parts1) > 1:
                        mapping[key]["children"] = []
                        current_level.append(mapping[key])
                current_level = mapping[key].get("children", [])
            mapping[key]["prop"] = item2

        return result


    list1 = ['1>->11', '2>->21', '2>->22>->221>->2211', '3>->31>->311']
    list2 = ['a', 'b', 'c', 'd']

    result = transform_lists_to_structure(list1, list2)
    print(result)