回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正在解析JSON并尝试基于“parents”键递归地创建一个树,但是我很难获得我期望的输出。以下是JSON:</p>
<pre><code>{
"cases": [
{
"name": "A",
"parents": [
"E",
"B"
]
},
{
"name": "B",
"parents": [
"C",
"D"
]
},
{
"name": "C",
"parents": [
"E"
]
},
{
"name": "D",
"parents": [
"E"
]
},
{
"name": "E",
"parents": [
]
}
]
}
</code></pre>
<p>这是我的密码:</p>
<pre><code>import json
import copy
FILE="somefile.json"
def find_path(test_name, data, current_steps):
tc = return_test_data(test_name, data)
parents = tc.get('parents', [])
if not current_steps:
current_steps.append(test_name)
if not parents:
return current_steps
else:
temp_steps = []
for step in parents:
new_c_s = copy.deepcopy(current_steps)
new_c_s.append(step)
new_steps = find_path(step, data, new_c_s)
temp_steps.append(new_steps)
return temp_steps
def return_test_data(test_name, data):
for test in data['cases']:
if test['name'] == test_name:
return test
return False
if __name__ == "__main__":
data = json.load(open(FILE))
steps = find_path("A", data, [])
print ("Steps: {}".format(steps))
</code></pre>
<p>我希望能看到一个简单的父母名单,按他们被找到的顺序排列:</p>
<pre><code>Steps: ['A', 'E', 'B', 'C', 'E', 'D', 'E']
</code></pre>
<p>在本例中,A有两个父对象:E&B。迭代这两个对象以获取它们的父对象,因此结果将是:</p>
<pre><code>['A', 'E', {parents of E}, 'B', {parents of B}].
</code></pre>
<p>因为E没有父母,B有C和D的父母,这(在我看来)变成:</p>
<pre><code>['A', 'E', 'B', 'C', {parents of C}', 'D', {parents of D}]
</code></pre>
<p>最终变成:</p>
<pre><code>['A', 'E', 'B', 'C', 'E', 'D', 'E']
</code></pre>
<p>相反,我得到:</p>
<pre><code>Steps: [['A', 'E'], [[['A', 'B', 'C', 'E']], [['A', 'B', 'D', 'E']]]]
</code></pre>
<p>我肯定我传递了太多的递归,但不知道到底是什么。你知道吗</p>