我试图从nested字典和列表组成的数据结构中提取了一系列的意见。贝娄是什么我处理的,什么我至今写了一个例子:

example = {"text" : "Level 0", 
                "children" : [{"text": "Level 1",
                                "children" : [{"text": "Level 2a"}, 
                                              {"text": "Level 2b"}]}] }


def parse_comments(comment_tree): 

    if isinstance(comment_tree, list): 
        for tree in comment_tree: 
            return parse_comments(tree)
    if isinstance(comment_tree, dict): 
        if "children" in comment_tree.keys(): 
            return comment_tree["text"], parse_comments(comment_tree["children"])
        else: 
            return comment_tree["text"]

理想情况下,输出将类似于此:

[["Level 0", "Level 1", "Level 2a"], ["Level 0", "Level 1", "Level 2b"]]

我目前得到这个:

('Level 0', ('Level 1', 'Level 2a'))

有什么建议么?

分析解答

您可以使用recursion与发电机:

example = {"text" : "Level 0", "children" : [{"text": "Level 1","children" : [{"text": "Level 2a"}, {"text": "Level 2b"}]}] }
def get_comments(d, c = []):
  if 'children' not in d:
      yield c+[d['text']]
  else:
      for i in d['children']:
         yield from get_comments(i, c+[d['text']])

print(list(get_comments(example)))

输出:

[['Level 0', 'Level 1', 'Level 2a'], ['Level 0', 'Level 1', 'Level 2b']]