如何检查边缘是否在Networkx中具有属性

时间:2013-06-22 21:12:32

标签: attributes networkx edges

我在yEd中创建了一个图表,我想检查边是否有属性。例如,一些边缘有标签,但有些边缘。当我尝试这样做时,我收到一个错误:

for n, nbrs in G.adjacency_iter():
  for nbr,eattr in nbrs.items():
    evpn = eattr['vpn']
    elabel = eattr['label']  #error is here
    if evpn != "No":
      nlabel = G[n].get("label")
      platform = G[n].get("platform")
      if G[nbr].get("platform") == platform:
        g_vpn.add_nodes_from([n,nbr], label, platform) # I dont know if this way 
                                                 #to set attributes is right

虽然vpn属性有效但因为我设置了默认值。我知道我可以在所有边缘添加标签值,但我希望我的程序检查标签是否缺失并设置默认值,就像我在下面所做的那样。虽然它不起作用,因为它在某些边缘找不到label属性:

for e,v in G.edges():
  if G[e][v].get("label") == ""
  label = "".join("vedge",i)
  i+=1
  G[e][v]['label']=label

此外,如果您可以检查其余代码,并告诉我它是否需要任何改进或使一些事情更容易。感谢

1 个答案:

答案 0 :(得分:8)

边缘属性存储为字典,因此您可以测试密钥是否在字典中:

In [1]: import networkx as nx

In [2]: G = nx.Graph()

In [3]: G.add_edge(1,2,color='blue')

In [4]: G.add_edge(2,3)

In [5]: 'color' in G[1][2]
Out[5]: True

In [6]: 'color' in G[2][3]
Out[6]: False