Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 仅当不存在具有相同属性的节点时,才将节点添加到网络x_Python_Networkx - Fatal编程技术网

Python 仅当不存在具有相同属性的节点时,才将节点添加到网络x

Python 仅当不存在具有相同属性的节点时,才将节点添加到网络x,python,networkx,Python,Networkx,我对networkx和图形技术非常陌生,需要您的帮助 我正在设计一个图,其中每个节点都有一个node_id(这只是我在生成图时迭代的点数)和五个属性 即 所以现在我想考虑添加一个新的节点,具有一些坐标。 现在,在向图中添加新节点之前,我想检查是否已经有一个节点具有与我要添加的节点相同的属性(坐标之一) 如果已经存在一个具有共享坐标的节点,那么我将不添加新节点,而只是对现有节点进行一些更改 我能想到的唯一方法是循环图中所有现有的节点,并检查其中一个属性是否与我正在考虑添加的节点相同。例如 find

我对networkx和图形技术非常陌生,需要您的帮助

我正在设计一个图,其中每个节点都有一个node_id(这只是我在生成图时迭代的点数)和五个属性

所以现在我想考虑添加一个新的节点,具有一些坐标。 现在,在向图中添加新节点之前,我想检查是否已经有一个节点具有与我要添加的节点相同的属性(坐标之一)

如果已经存在一个具有共享坐标的节点,那么我将不添加新节点,而只是对现有节点进行一些更改

我能想到的唯一方法是循环图中所有现有的节点,并检查其中一个属性是否与我正在考虑添加的节点相同。例如

find_node = [attrdict for n,attrdict in G.node.items() if attrdict['coord1'] == tempcoord ]    
其中tempcoord是我要添加的节点上的坐标

这显然是非常低效的,每当我想添加节点以检查所有现有节点时,我的问题是:有更好的方法吗

我知道networkx不会添加具有相同id的新节点,但不会扩展到共享相同属性的节点,对吗

或者,使用所有这些“重复”节点构建图形,然后在添加所有节点后将具有某些共享属性的所有节点压缩为一个节点,这样做是否更好


抱歉,解释起来有些复杂,我希望它有一定的意义。

创建一个包含所有观察到的节点属性的集合。如果要添加具有给定属性的节点,请检查该属性是否存在。如果是,则不执行任何操作,但如果不是,则添加它并将属性放入集合中。如果函数是在代码的不同部分完成的,那么定义一个函数来完成这些步骤可能是值得的

seen_attributes = set()

# code here adding nodes

node = node_to_add
attribute = attribute_of_node

if attribute not in seen_attributes:
    G.add_node(node, coord=attribute)
    seen.add(attribute)

这些答案是否不恰当?或者嗨,泽佐洛,谢谢你指向那些线索。虽然他们确实有亲戚关系,但他们并没有真正回答我的问题。我知道如何获取属性值列表和/或索引,只需选择具有特定属性的所有节点。我想知道的是,是否可以基于唯一属性而不是节点索引来访问节点。本质上,我希望能够通过多个可哈希属性而不仅仅是节点索引来访问节点。有没有办法做到这一点?这是一个好主意,肯定会奏效,我设法解决了我的问题,还包括一个字典,其中键是属性,值是节点索引。这样我就可以检查字典中是否有密钥,如果找到了,我就知道节点已经存在。
seen_attributes = set()

# code here adding nodes

node = node_to_add
attribute = attribute_of_node

if attribute not in seen_attributes:
    G.add_node(node, coord=attribute)
    seen.add(attribute)