在Python Networkx中的两个节点之间添加逐个节点属性

时间:2015-12-01 04:46:32

标签: python object attributes nodes networkx

我正在编写一些python代码来创建两个节点之间的边缘,然后从其中一个节点中随机删除2个边,但是使用其他节点(不是原始节点)。

现在我被卡住(并多次查看所有networkx文档)。

我打电话/命名其中一个节点" bad_apple_Bad_apple" - 我捕获的另一个是" self.most_central_node"中最重要的节点。使用max函数来识别它。我似乎无法选择节点对象本身,以便我可以使用add_edge()创建边缘。

我非常确定我需要解释更多,但下面是代码。如果需要的话,我可以发布更多的代码,但我尝试在代码文件中稍微进一步了解我正在做的事情。

    self.most_central_node = max(nx.closeness_centrality(self.combined_network))
    print("The node with the max value for closeness centrality in the combined network is: ", self.most_central_node)

    self.bad_apple_node_stuff = self.combined_network['bad_apple_Bad_apple']

    print("This is the bad apple test", self.bad_apple_node_stuff) #This is not printing the node object which means I'm not selecting it. It's printing it's attributes, I think. This is where the issue is.

    self.combined_network.add_edge(self.combined_network.node['bad_apple_Bad_apple'], self.combined_network.node['closeness'==self.most_central_node]) #<<-- this doesnt work, no specific error though

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题。在该行:

self.most_central_node = max(nx.closeness_centrality(self.combined_network))

closeness_centrality实际上返回一个字典,其中节点是键,其中心是值。您的行只是通过整数或最长字符串或其他任何节点选择最大节点。你应该改为:

close = nx.closeness_centrality(self.combined_network)
from operator import itemgetter
self.most_central_node = max(close.items(), key=itemgetter(1))[0]

最后一行用它们的接近度值比较所有(节点,接近度)对,然后简单地将相关节点存储在变量中。

现在,如果您已经知道其他节点是'bad_apple_Bad_apple',那么您只需发出声明:

self.combined_network.add_edge(self.most_central_node, 'bad_apple_Bad_apple')

另请注意,您已在代码中访问了存储属性的词典:

network.graph

是存储图表属性的位置,例如name

network.node

是存储节点属性的地方,例如

network.node['bad_apple_Bad_apple']

将返回 dict ,其中包含属性及其值的名称。

您说您已多次阅读文档,但我强烈建议您浏览tutorial