如何在python中修改嵌套列表树结构?

2024-09-30 01:35:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我从reddit commments部分解析了一些JSON数据。我试图将评论结构表示为发表评论的作者的嵌套列表(树)。我的输入数据如下所示:

[u'a1',
 [u'a2',
  [u'a1', [u'a2']],
  u'a3',
  [u'a1']],
 u'a4',
 [u'a5']]

在本例中,a1和a4是原始父post的子节点。a1有两个相关联的子元素,a2和a3。a4只有一个子节点(一个响应)。我相信我真正想要的结构应该是这样的:

^{pr2}$

以下是我希望如何重新设置第一项的格式:

[u'a1',
  [u'a2',
   [u'a1', [u'a2']]],
  [u'a3',
   [u'a1']]]

我很迷茫,但我有这样的东西来重新格式化树,只在父节点的正下方:

[tree[i:i+2] for i in range(0,len(tree),2)]

我需要这样一个递归工作的东西,可以处理任意数量的子节点到父节点。我被卡住了。在

谢谢


Tags: 数据jsontreea2列表节点a1评论
1条回答
网友
1楼 · 发布于 2024-09-30 01:35:50

Question: I need something like this that will work recursively

list的嵌套list上递归迭代,例如:

_list = [[u'a1',
  [u'a2',
   [u'a1', [u'a2']]],
  [u'a3',
   [u'a1']]],
 [u'a4',
  [u'a5']]]

def scan(_list, l=-1, i=-1):
    if isinstance(_list, list):
        print('list {}:{}'.format((l,i), _list))
        l += 1
        for i, item in enumerate(_list):
            scan(item, l, i)

if __name__ == '__main__':
    scan(_list)
    print('3,1:{}'.format(_list[0][1][1][1]))

Output:

list (-1, -1):[['a1', ['a2', ['a1', ['a2']]], ['a3', ['a1']]], ['a4', ['a5']]]
list (0, 0):['a1', ['a2', ['a1', ['a2']]], ['a3', ['a1']]]
list (1, 1):['a2', ['a1', ['a2']]]
list (2, 1):['a1', ['a2']]
list (3, 1):['a2']
list (1, 2):['a3', ['a1']]
list (2, 1):['a1']
list (0, 1):['a4', ['a5']]
list (1, 1):['a5']
3,1:['a2']

用Python:3.4.2测试

相关问题 更多 >

    热门问题