我在networkx中尝试一些非常简单的事情
import networkx as nx
G = nx.erdos_renyi_graph(4,1) # This creates a complete graph
nx.set_edge_attributes(G, 'sign', {(0, 1) : 1})
print nx.get_edge_attributes(G, 'sign')[(0, 1)]
打印1
。到现在为止还挺好。但现在我将最后一行更改为:
print nx.get_edge_attributes(G, 'sign')[(1, 0)]
我认为由于边缘是无向的,这不重要,代码应该再次打印1
。但令我惊讶的是,我得到了这个:
Traceback (most recent call last):
File "test.py", line 7, in <module>
print nx.get_edge_attributes(G, 'sign')[(1, 0)]
KeyError: (1, 0)
这让我发疯了。它不应该(1, 0)
与(0, 1)
相同吗?此外,如果不是这种情况,我如何使networkx对待它们?另外,在我们谈论边缘的其他地方,我们是否总是需要为每个边缘指定两次?
提前感谢您的帮助。
答案 0 :(得分:2)
我认为你应该使用:
访问无向图的edge属性G[0][1]['sign']
和
G[1][0]['sign']
两者都正确返回1
。我认为nx.get_edge_attributes
方法只允许获取边缘的属性作为一个整体,如:
print nx.get_edge_attributes(G, 'sign')
返回:
{(0, 1): 1}
希望有所帮助。