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

时间:2017-06-25 15:56:16

标签: python json parsing tree

我已经从reddit commments部分解析了一些JSON数据。我试图将评论结构表示为作出评论的作者的嵌套列表(树)。我的输入数据看起来像这样:

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

在此示例中,a1和a4是原始父帖子的子节点。 a1有两个与之相关的孩子,a2和a3。 a4只有一个子节点(一个响应)。我相信我真正想要的结构应该是这样的:

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

以下是关于如何重新格式化第一项的重点:

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

我很丢失,但我有类似的东西在父节点正下方的水平面重新格式化树:

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

我需要这样的东西,它可以递归地工作,并且可以处理父项的任意数量的子节点。我被困了。

由于

1 个答案:

答案 0 :(得分:0)

  

问题:我需要这样一些可以递归工作的东西

例如,对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])) 进行递归迭代:

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']
  

输出

{{1}}

使用Python测试:3.4.2