假设我有以下数据,我想在“免疫缺陷”的保护伞下找到所有的东西。
startNode - relationship - endNode
immunodeficiencies - includes - B cell disorders
B cell disorders - includes - Bruton Agammaglobulinemia
B cell disorders - includes - Hyper-IgM syndrome
immunodeficiencies - includes - T cell disorders
T cell disorders - includes - DiGeorge Syndrome
immunodeficiencies - includes - combined B and T cell disorders
combined B and T cell disorders - includes - Ataxia-Telangiectasia我该怎么做?数据是JSON格式的,所以它就像这个{"startNode": "immunodeficiencies", "relationship": "includes", "endNode": "B cell disorders"}
对于一个非嵌套的类别来说,这很容易。我做了以下工作:
for x in range(len(peds_diseaseR))
if peds_diseaseR[x]["startNode"] == "immunodeficiencies" && peds_diseaseR[x]["relationship"] == "includes":
List.append(x)对于一种嵌套的疾病,我真的迷路了。我觉得我可能需要一个递归函数,但我不知道。我本来打算把我写的代码打印出来,但我觉得它比任何东西都更让人困惑,而且不起作用。
编辑:刚添加了这个,但是它不起作用。
var endNodes = []
func findEndNodes(start):
for x in range(len(peds_diseaseR)):
if peds_diseaseR[x]["startNode"] == start && peds_diseaseR[x]["relationship"] == "includes":
endNodes.append(peds_diseaseR[x]["endNode"])
if endNodes != []:
for disease in endNodes:
findEndNodes(disease)
print(endNodes)
return endNodes发布于 2020-12-03 15:10:16
你们很亲密。只要稍微重新安排一下,你就会找到解决办法:
peds_diseaseR = []
def findEndNodes(start):
# declared inside the function, because you need a fresh one for every recursion
childnodes = []
for relationship in peds_diseaseR:
if relationship["startNode"] == start && relationship["relationship"] == "includes":
disease = relationship["endNode"]
child_nodes.append(disease)
# If you process it now, you do not need to check if you have values in your list.
# Thus, less code, but more importantly, less states your code can be in.
# It is very easy to get lost trying to make a mental map when doing recursion.
# Keep it as simple as possible!
recursion_nodes = findEndNodes(disease)
child_nodes.extend(recursion_nodes)
print(child_nodes)
return child_nodes如您所见,我只将func替换为def,并删除了var关键字。在python中是不存在的。您只需分配一个值。附加和扩展之间有细微但微妙的区别。extend将append列表中的所有值。
https://stackoverflow.com/questions/65126757
复制相似问题