2017-07-30 35 views
0
def pi_drug_target(graph, node): 
    pi_to_drug_nodes = P.neighbors(node) 
    nghr_targets = {} 

    for pi_drug in pi_to_drug_nodes: 
     nghr_targets[pi_drug] = {} 
     nghr_targets[pi_drug]['treated with'] = [] 

     if B.has_node(pi_drug): 
      drug_target = B.neighbors(pi_drug) 

     for targets in drug_target: 
      nghr_targets[pi_drug]['treated with'].append(targets) 
      nghr_targets[targets]['treated with']['neighbors with'] = [] 

      if G.has_node(targets): 
       gg_nodes = G.neighbors(targets) 
       for ggn in gg_nodes: 

        if G.has_node(ggn): 
         nghr_targets[pi_drug]['treated with']['neighbors with'].append(ggn) 
    return(nghr_targets) 

KeyError         Traceback (most recent call last) 
<ipython-input-45-54c0755520e2> in <module>() 
    ----> 1 pi_drug_target(P, 'DO218719') 

<ipython-input-42-22f6ce132dca> in pi_drug_target(graph, node) 
12    for targets in drug_target: 
13     nghr_targets[pi_drug]['is treated with'].append(targets) 
---> 14     nghr_targets[targets]['treated with']['Gene neighbors with'] = [] 
15 
16     if G.has_node(targets): 

KeyError: 'CYP19A1' 

我有3个networkx图形P,B,和G我想创建一个函数,其中,当我输入P中图形中的节点,它会找到给定节点的邻居节点。然后,遍历这些邻居,并在另一个图(B)中找到它的邻居。然后,循环遍历在 B图中找到的邻居,并在另一个图(G)中再次找到邻居。我想创建一个嵌套的字典,将节点显示为键和邻居作为值。这是我创建的代码,但即使检查节点确实存在于图中,我也会得到此KeyError。在KeyError异常所得创建嵌套字典

我刚开始编程和使用networkx。所以,任何帮助表示赞赏!谢谢!

回答

1

在主for循环的开始处,您有:nghr_targets[pi_drug] = {}

让我们第一次跟踪该循环。您为nghr_targets初始化的所有值为pi_drug。但是,您可以使用nghr_targets和密钥targets。如果有任何targets不是pi_drug,那么通过它的第一次必须失败。

在贯穿整个循环之前首先进行初始化。或者更好,使用defaultdict

+0

谢谢!还没有与defaultdict工作,所以我根据你的建议初始化之前先循环和它的工作! –