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

在Python Networkx中的两个节点之间添加“逐节点边缘”属性,python,object,attributes,nodes,networkx,Python,Object,Attributes,Nodes,Networkx,我正在编写一些python代码,在两个节点之间创建一条边,然后从其中一个节点随机删除两条边,但其他节点(不是原来的两条) 现在我被卡住了(并且已经多次浏览了所有networkx文档) 我调用/命名其中一个节点为“bad_apple\u bad_apple”-我捕获的另一个节点是“self.most_central_node”中最中心的节点,使用max函数来识别它。我似乎无法选择节点对象本身,以便使用add_edge()创建边 我很确定我需要解释更多,但下面是代码。如果需要的话,我可以发布更多的代

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

现在我被卡住了(并且已经多次浏览了所有networkx文档)

我调用/命名其中一个节点为“bad_apple\u 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
self.most\u central\u node=max(nx.closeness\u centrality(self.combined\u network))
打印(“组合网络中接近中心度最大值的节点为:”,self.most\u central\u node)
self.bad\u apple\u node\u stuff=self.combined\u network['bad\u apple\u bad\u apple']
打印(“这是坏苹果测试”,self.bad_apple_node_stuff)#这不是打印节点对象,这意味着我没有选择它。我想它正在打印它的属性。这就是问题所在。

self.combined_network.add_edge(self.combined_network.node['bad_apple\u bad_apple'],self.combined_network.node['closeness'==self.most_central_node])您的代码有一些问题。行中:

self.most_central_node = max(nx.closeness_centrality(self.combined_network))
实际上返回一个字典,其中节点是键,它们的中心是值。您的行只需通过节点是整数或最长字符串或其他方式选择最大节点。您应该将其更改为:

close = nx.closeness_centrality(self.combined_network)
from operator import itemgetter
self.most_central_node = max(close.items(), key=itemgetter(1))[0]
最后一行通过闭合度值比较所有(节点,闭合度)对,然后简单地将关联节点存储在变量中

现在,如果您已经知道您的另一个节点是“bad\u apple\u bad\u 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


您说您已经多次阅读了文档,但我强烈建议您仔细阅读。

我在弄清楚您到底想做什么时遇到了一些困难。你能给出一个输入示例和你想要的输出吗?我想确定我的网络中名为“组合网络”的节点“bad_apple_bad_apple”,并在它和最中心的节点(通过接近中心性)之间创建一条边,我使用add_edge()称之为“最中心节点”。基本上,代码中的最后一行不起作用(以self.combined_network.add_edge开头的那一行你似乎已经识别出了不起作用的行。你能去掉不起作用的部分并创建一个吗?大概你可以使用一些更简单的属性。我想一旦我看到它就足够清楚了。我想我按照你要求的方式编辑了。我去掉了所有的代码,除了at是理解的必要条件。此外,我更改了代码中的注释以澄清我需要帮助的地方。这是否足够让您理解我需要帮助?非常感谢您提前提供的帮助Joel。这与能够基于“关键点”创建边缘有关节点的。节点显然是作为对象存储在字典中。我不擅长使用字典。我所需要的只是找出如何创建从“bad_apple\u bad_apple”到“most_central_node”的边。非常感谢。这很有效。你应该将自己重命名为Midnight genius。因此,我的问题是我不知道如何在节点字典中调用对象项本身。我想。是时候再次查看字典模块了!感谢大家的赞扬,很高兴能帮上忙。