Python 生成嵌套列表Django
我有一个这样的电子表格。我必须生成一个嵌套列表。如果父id为0,则它将没有父id,即根id 结果列表如下所示Python 生成嵌套列表Django,python,django,Python,Django,我有一个这样的电子表格。我必须生成一个嵌套列表。如果父id为0,则它将没有父id,即根id 结果列表如下所示 请告诉我怎么做。多亏了将元组列表转换为树结构的一般方法是迭代并创建父/子关系: data = [(newid, parentid, name), ...] # getting the data into this format left as an excercise for the reader # convert data into tree-structure tree =
请告诉我怎么做。多亏了将元组列表转换为树结构的一般方法是迭代并创建父/子关系:
data = [(newid, parentid, name), ...] # getting the data into this format left as an excercise for the reader
# convert data into tree-structure
tree = {
newid: {
"parentid": parentid,
"name": name,
"parent": None,
"children": []
} for newid, parentid, name in data }
for newid, item in data.items():
node = tree[newid]
if node['parentid'] is not None:
parent = node['parent'] = tree[node['parentid']
parent.children.append(node)
然后,您可以通过以下方式找到根节点:
roots = [node for node in tree.values() if node.parent is None]
您可以创建一个模板标记来帮助显示这些内容,也可以在javascript中进行,例如,如果您将根
作为json传递给模板。转储(根)
:
(函数drawroots(位置,根){
let draw_leaf=函数(n){
返回“+n.name+” ”;
};
设draw_子树=函数(n){
让res=“”+n.name+”;
n、 forEach(c=>{res+=draw_node(c);});
res+=“ ”;
};
设draw_节点=函数(n){
return(node.children.length==0)?draw_叶(n):draw_子树(n);
};
$(位置)。附加(“”);
roots.forEach(r=>{
$(pos).append(draw_节点(r));
});
$(位置)。附加(“”);
}(#mylst',{{roots}});
在js中有很多更好的方法可以做到这一点,但这应该让你开始了。你自己尝试过什么吗?如果没有,试着开始,然后在遇到问题时寻求帮助。给我一些提示,开始将所有元素从电子表格拉到某个列表或字典或python中的任何东西,然后想想该怎么做一旦你有了这个清单
<div id="mylst"></div>
<script>
(function drawroots(pos, roots) {
let draw_leaf = function (n) {
return '<li> + n.name + '</li>';
};
let draw_subtree = function (n) {
let res = "<li>" + n.name + "<ol>";
n.children.forEach(c => {res += draw_node(c); });
res += "</li></ol>";
};
let draw_node = function (n) {
return (node.children.length === 0) ? draw_leaf(n) : draw_subtree(n);
};
$(pos).append('<ol>');
roots.forEach(r => {
$(pos).append(draw_node(r));
});
$(pos).append('</ol>');
}('#mylst', {{roots}});
</script>