我几个小时都来回走动,我似乎无法做到。
我一直在尝试将问题分解为if语句,如前一个数字<数字,然后创建一个子组,然后通过它,但我已经遇到麻烦缠绕我的头围绕一种方式轻松穿过树。我认为json会有工具允许我这样做,但我似乎无法找到任何工具。
我想将[(1, 'item1'),(2, "item2"),(2, "item3"),(3, "item4"),(2, "item5")]
之类的元组列表转换为JSON和HTML。
我不认为我很清楚解释树的格式,所以我将进一步详细说明。
每个数字代表节点的级别,并且它是有序的,所以它应该是一个元组。
它显示为print '\t' * indent
Item1
Item2
Item3
Item4
Item5
每当数字递增时,所有带增量的项目都是前一个数字的子项。
Item1
Child of Item1
Child Item2
Child of item2
Child Item3
Child of Item 3
Child of item2
Child of Item 1
当您将此有序列表放在一起时,您可以将其转换为Json树,如下所示,这正是我正在努力的方向。
{
"name": "item1",
"children": [
{"name": "item2"}
{
"name": "item3",
"children": [
{"name": "item4"}
]
}
{"name": "item5"}
]
}
和HTML树
<div class="list">
<ul>
<li><span>item</span>
<ul>
<li>item2</li>
<li><span>item3</span>
<ul>
<li>item4</li>
</ul>
</li>
<li>item5</li>
</ul>
</li>
</ul>
</div>
需要x个项目。
答案 0 :(得分:0)
以下代码非常递归,但是以JSON的形式提供了所需的结果。如果这是可以接受的,我将研究生成类似的HTML。
data = [(1, 'item1'), (2, "item2"), (2, "item3"), (3, "item4"), (2, "item5")]
import json
class Entity(object):
def __init__(self, name=None, parent=None):
self.name = name
self.parent = parent
self.level = parent.level + 1 if parent else 0
self.children = []
def to_json_obj(self):
if len(self.children):
return {'name': self.name, 'children': [child.to_json_obj() for child in self.children]}
else:
return {'name': self.name}
def data_to_json(data):
tree = Entity()
current = tree
for item in data:
if item[0] > current.level:
pass
else:
while True:
current = current.parent
if current.level == item[0] - 1:
break
new = Entity(item[1], current)
current.children.append(new)
current = new
return json.dumps(tree.to_json_obj()["children"][0], indent=2)
print data_to_json(data)
给出输出
{
"name": "item1",
"children": [
{
"name": "item2"
},
{
"name": "item3",
"children": [
{
"name": "item4"
}
]
},
{
"name": "item5"
}
]
}