Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.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 igraph在两个顶点之间添加具有对象名称的边时崩溃_Python_Igraph - Fatal编程技术网

python igraph在两个顶点之间添加具有对象名称的边时崩溃

python igraph在两个顶点之间添加具有对象名称的边时崩溃,python,igraph,Python,Igraph,我在Windows 7下运行Python 3.4中的igraph 0.7.1,以下代码崩溃: import igraph class Person: def __init__(self, name): self.name = name alice = Person('Alice') bob = Person('Bob') g = igraph.Graph() g.add_vertex(alice) g.add_vertex(bob) print(g.vs[0]['na

我在Windows 7下运行Python 3.4中的igraph 0.7.1,以下代码崩溃:

import igraph

class Person:
    def __init__(self, name):
        self.name = name

alice = Person('Alice')
bob = Person('Bob')
g = igraph.Graph()
g.add_vertex(alice)
g.add_vertex(bob)
print(g.vs[0]['name'] == alice)
print(g.vs[1]['name'] == bob)
g.add_edge(alice, bob)
结果如下:

True
True
  File "C:\Python34\lib\site-packages\igraph\__init__.py", line 237, in add_edge
    return self.add_edges([(source, target)])
  File "C:\Python34\lib\site-packages\igraph\__init__.py", line 255, in add_edges
    return GraphBase.add_edges(self, es)
TypeError: only numbers, vertex names or igraph.Vertex objects can be converted to vertex IDs
这段代码似乎应该可以工作,因为在本例中alice和bob是顶点名称,实际上存储在顶点的“name”属性中。有趣的是,以下情况不会崩溃:

g = igraph.Graph()
g.add_vertex('Alice')
g.add_vertex('Bob')
g.add_edge('Alice', 'Bob')

我意识到我应该让我的问题更加明确:有人知道为什么会崩溃吗?有没有其他方法可以将Python对象用作顶点名称而不是字符串?那么,您的问题是什么?显然,igraph不支持使用对象作为顶点名称。如果igraph不支持使用对象作为顶点名称,为什么它首先允许构建顶点?这是一种缺陷。“name”只是节点的另一个属性,碰巧在其他一些函数中使用。与其他属性一样,它可以是任何属性,但同时其他一些函数可能依赖于某些特定的数据类型。在您的情况下,您可以使用字符串作为节点名称,并将对象存储在另一个属性中,如g.vs[0]['data']。我意识到我应该更明确地提出我的问题:有人知道为什么会崩溃吗?有没有其他方法可以将Python对象用作顶点名称而不是字符串?那么,您的问题是什么?显然,igraph不支持使用对象作为顶点名称。如果igraph不支持使用对象作为顶点名称,为什么它首先允许构建顶点?这是一种缺陷。“name”只是节点的另一个属性,碰巧在其他一些函数中使用。与其他属性一样,它可以是任何属性,但同时一些其他函数可能依赖于某些特定的数据类型。在您的情况下,您可以将字符串用作节点名称,并将对象存储在另一个属性中,如g.vs[0]['data']。