首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取分支数据/图数据

获取分支数据/图数据
EN

Stack Overflow用户
提问于 2020-12-03 13:17:21
回答 1查看 27关注 0票数 1

假设我有以下数据,我想在“免疫缺陷”的保护伞下找到所有的东西。

代码语言:javascript
复制
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"}

对于一个非嵌套的类别来说,这很容易。我做了以下工作:

代码语言:javascript
复制
for x in range(len(peds_diseaseR))
if peds_diseaseR[x]["startNode"] == "immunodeficiencies" && peds_diseaseR[x]["relationship"] == "includes":
    List.append(x)

对于一种嵌套的疾病,我真的迷路了。我觉得我可能需要一个递归函数,但我不知道。我本来打算把我写的代码打印出来,但我觉得它比任何东西都更让人困惑,而且不起作用。

编辑:刚添加了这个,但是它不起作用。

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-03 15:10:16

你们很亲密。只要稍微重新安排一下,你就会找到解决办法:

代码语言:javascript
复制
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中是不存在的。您只需分配一个值。附加和扩展之间有细微但微妙的区别。extendappend列表中的所有值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65126757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档