<p>可以递归地对数据进行迭代。Prefix表示到目前为止看到的名称列表,data表示您还必须学习的词法列表。在</p>
<pre><code>data = [{
"Id": "f035de7f",
"Name": "Org1",
"ParentId": None,
"Children": [{
"Id": "8c18a70d",
"Name": "Org2",
"ParentId": "f035de7f",
"Children": []
}, {
"Id": "b4514099",
"Name": "Org3",
"ParentId": "f035de7f",
"Children": [{
"Id": "8abe58d1",
"Name": "Org4",
"Children": []
}],
}, {
"Id": "8e35bdc3",
"Name": "Org5",
"ParentId": "f035de7f",
"Children": [{
"Id": "331fffbf",
"Name": "Org6",
"ParentId": "8e35bdc3",
"Children": [{
"Id": "3bc3e085",
"Name": "Org7",
"ParentId": "331fffbf",
"Children": []
}],
}],
}],
}]
def flatten(data, prefix):
if not data:
return [prefix]
result = []
for org in data:
name = org["Name"]
result.extend(flatten(org["Children"], prefix + [name]))
return result
print(flatten(data, []))
# [['Org1', 'Org2'], ['Org1', 'Org3', 'Org4'], ['Org1', 'Org5', 'Org6', 'Org7']]
</code></pre>
<p>同样,使用产量:</p>
^{pr2}$
<p>如果需要所有部分列表,则解决方案更短:</p>
<pre><code>def flatten(data, prefix):
yield prefix
for org in data:
name = org["Name"]
yield from flatten(org["Children"], prefix + [name])
print(list(flatten(data, [])))
# [[], ['Org1'], ['Org1', 'Org2'], ['Org1', 'Org3'], ['Org1', 'Org3', 'Org4'], ['Org1', 'Org5'], ['Org1', 'Org5', 'Org6'], ['Org1', 'Org5', 'Org6', 'Org7']]
</code></pre>