我有一个相当基本的列表如下:
listOne = [parentOneObject,childOne,childTwo,childThree,parentTwoObject,childOne,childTwo...]
从理论上讲,这个列表包含父母和他们旁边的孩子,每个iteml是这个列表是一个对象(实际上是一个HTML元素,但这不是问题)
变成了一个层次结构,我们得到了这个:
-ParentOne
-Child1
-Child2
-Child3
-ParentTwo
-Child1
-Child2
等等......
为了区分父母,我检查他们的类属性是否包含:level-1
。其他孩子的class属性为"level-i"
,其中i
是一个大于1的整数。
我无法找到一种方法将该列表转换为更加结构化的dict列表,如下所示:
listTwo = [{
'parent' : parentOne,
'children': [childOne,childTwo,childThree]
},
{'parent':parentTwo,
'children': [childOne,childTwo,childThree]
}]
我想使用前面解释的逻辑将第一个基本列表转换为parnet和children对象的字典列表。
我知道我应该至少有一个最小代码,但是对于这个问题我完全陷入困境,我唯一的代码是:
for item in listOne:
#Do something to turn list one into a structured list
pass
你可以看到没什么用处,我很乐意得到一些帮助,不一定是python,因为我陷入了逻辑层面,甚至伪代码也没问题。
答案 0 :(得分:2)
你需要有办法区分父母和孩子。然后你所要做的就是在循环中测试它:
listTwo = []
entry = None
for element in listOne:
if isparent(element): # put your test here
entry = {'parent': element, 'children': []}
listTwo.append(entry)
else: # it's a child, append to last parent
entry['children'].append(element)
因此,如果您可以通过HTML类区分HTML元素,那么只需测试它:
if 'level-1' in element.get('class', []): # it's a parent
请注意,如果listOne
中的第一个元素不是父元素,entry['children']
表达式将失败,因为entry
仍设置为{{1在那个阶段。这是故意的,你想知道你是否有这样的错误。