# list转树形数据
def listtotree(datalist, fidname, idname, root=None):
"""
list转树形数据
:param datalist: 数据源 [{'ID': 1, 'NM': '人', 'FID': 0},{'ID': 2, 'NM': '男人', 'FID': 1}]
:param root: 根节点(不传入root表示所有树,传入root表示一棵树)
:param fidname: 父级ID名 FID
:param idname: 自增加序号ID字段 ID
:return: tree 数据
示例:
data = [{'ID': 1, 'NM': '人', 'FID': 0},
{'ID': 2, 'NM': '男人', 'FID': 1},
{'ID': 3, 'NM': '女人', 'FID': 1},
{'ID': 4, 'NM': '狗', 'FID': 0},
{'ID': 5, 'NM': '猫', 'FID': 0},
{'ID': 6, 'NM': '狮子', 'FID': 0}]
调用方法
listtotree(data, 0, 'FID', 'ID')
"""
rdata = []
ids = []
def t2(p):
for i, item in enumerate(datalist):
if i not in ids:
if p[idname] == item[fidname]:
if 'chids' not in p.keys():
p["chids"] = []
p["chids"].append(item)
t2(item)
ids.append(i)
for i, item in enumerate(datalist):
if root != None:
if i not in ids and item[fidname] == root:
t2(item)
ids.append(i)
rdata.append(item)
else:
if i not in ids:
t2(item)
ids.append(i)
rdata.append(item)
return rdata