無制限の分類ツリーで再帰的に無限ポールクラス2極のディクテーションとパイソン1つのディクテーション


data=[
    {"cat_id":3,"name":"沙河","parent_id":1},
    {"cat_id":4,"name":"sb镇","parent_id":3},
    {"cat_id": 1, "name": "北京", "parent_id": 0},
    {"cat_id":5,"name":"昌平","parent_id":1},
    {"cat_id":6,"name":"青浦","parent_id":2},
    {"cat_id": 2, "name": "上海", "parent_id": 0},
]

def get_tree(data):
    lists=[]
    tree={}
    for item in data:
        tree[item['cat_id']]=item
    for i in data:
        if not i['parent_id']:
            lists.append(tree[i['cat_id']])
        else:
            parent_id=i['parent_id']
            if "children" not in tree[parent_id]:
                tree[parent_id]["children"]=[]
            tree[parent_id]['children'].append(tree[i['cat_id']])

    return lists

# print(get_tree(data))




# data1=[
#     {"cat_id":1,"name":"北京","parent_id":0,
#      "childen":[
#          {"cat_id":3,"name":"沙河","parent_id":1,"childen":[{"cat_id":4,"name":"sb镇","parent_id":3},]},
#         {"cat_id":5,"name":"昌平","parent_id":1},]},
#     {"cat_id":2,"name":"上海","parent_id":0,
#      "childen":[{"cat_id":6,"name":"青浦","parent_id":2},]},
# ]

# 北京
# -沙河
# --sb镇
# -昌平
# 上海
# -青浦
lis = []
def get_son1(data,parent_id=0,level=0,is_clear=True):
    if is_clear:
        lis.clear()
    for item in data:
        if item['parent_id']==parent_id:
            item['level']=level
            lis.append(item)
            get_son1(data,parent_id=item["cat_id"],level=level+1,is_clear=False)
    return lis

# re_data=get_son1(data)
# for item in re_data:
#     print("-"*item['level']+item['name'])
res_id=[]
def get_son_id_list(data,parent_id,is_clear=True):
    if is_clear:
        res_id.clear()
        #如果parent_id不等与0,就把自己加进去
        if parent_id:
            res_id.append(parent_id)
    for item in data:
        #如果改分类的父级id为传过的parent_id,就把它的cat_id,存到res_id,接着找它自己有没有儿子,进行递归
        if item['parent_id']==parent_id:
            res_id.append(item['cat_id'])
            get_son_id_list(data,parent_id=item["cat_id"],is_clear=False)
    return res_id










def get_son(data):
    lis=[]
    for i in data:
        if not i['parent_id']:
            i['level']=0
        lis.append(i)
    return  lis

おすすめ

転載: www.cnblogs.com/abdm-989/p/12026866.html