zoukankan      html  css  js  c++  java
  • 拼接层级数据进行数据递归,生成父子数据

    拼接层级数据进行数据递归,生成父子数据

    ll = ["a-(b-(c,d),e-f,d)","a-(e-d,b)","a-(g-h-i-j-(k-l-n,v),0-p-q)"]
    def system_relationship_data(data_list_sys):
        sys_list_one = data_list_sys.replace(",",'","').replace('(','",["').replace(')','"]')
        sys_list_two = ''.join(['["',sys_list_one,'"]'])
        print(sys_list_two,'xx')
        sys_list = sys_list_two.replace(']"',']')
        print('xxxxx',sys_list)
        return eval(sys_list)
    def sys_rela_data_list_ser(data_list):
        data_sys_list = []
        for var_list in data_list:
            data_sys_list.extend(sys_data_list_ser(system_relationship_data(var_list)))
        return list(set(data_sys_list))
    
    def sys_data_list_ser(sys_data):
        print('>>>',sys_data)
        sys_data_list = []
        for index,i in enumerate(sys_data):
            if isinstance(i,str):
                if i.endswith('-'):
                    sys_data_list.extend([f"{i}{ls}" for ls in sys_data_list_ser(sys_data[index + 1])])
                else:
                    sys_data_list.append(i)
        print('???>>>',sys_data_list)
        return sys_data_list
    def sys_data_list_set(sys_data_ser_list):
        sys_data_set = []
        print('???',sys_data_ser_list)
        for i in sys_data_ser_list:
            is_t = False
            if not sys_data_set:
                print('aaa',i)
                sys_data_set.append(i)
                continue
            for index,j in enumerate(sys_data_set):
                print('>>>',i)
                print('>>>',j)
                if i in j:
                    is_t=False
                    break
                if j in i :
                    sys_data_set[index] = i
                    is_t = False
                    break
                else:
                    is_t=True
            if is_t:
                sys_data_set.append(i)
        return sys_data_set
    
    def group_data(data):
        l = []
        for var in data:
            a = var.split('-')
            l.append(a)
        return l
    def group(data):
        li=[]
        for i in data:
            li.append(i[1:])
        return [{'name':data[0][0],'values':1,'children':gr(li,2)}]
    def gr(data_list,var):
        ll = []
        for ii in data_list:
            if  len(ii) == 1:
                ll.append({'name':ii[0],'values':var,'children':[]})
                continue
            if not ll:
                ll.append({'name':ii[0],'values':var,'children':[ii[1:],]})
                continue
            is_t = False
            for va in ll:
                if va['name'] ==ii[0]:
                    va['children'].append(ii[1:])
                    is_t = False
                    break
                else:
                    is_t = True
            if is_t:
                ll.append({"name":ii[0],'values':var,'children':[ii[1:],]})
        for dic in  ll:
            dic['children'] = gr(dic["children"],var+1)
        return ll
    xx = sys_rela_data_list_ser(ll)
    xxa=sys_data_list_set(xx)
    xxaa = group_data(xxa)
    xxaaa = group(xxaa)
    print(xx )
    print(xxa )
    print(xxaa )
    print(xxaaa )
    
  • 相关阅读:
    100LS练习方法
    甲方开源项目
    linux端口转发方式
    内网的一些穿透工具
    Checkpoint防火墙(一)
    2020目标
    Linux逻辑卷的扩容和缩小
    linux挂载磁盘
    Selinux介绍
    以太坊私链搭建
  • 原文地址:https://www.cnblogs.com/mqhpy/p/14703361.html
Copyright © 2011-2022 走看看