我试图从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']]