添加顶点并重复名称
我正在使用Python的IGRAPH库。
我想知道有没有办法插入一个不存在的顶点。
比如:
import igraph
if __name__ == "__main__":
g = igraph.Graph()
g.add_vertex(1)
g.add_vertex(1)
for vertex in g.vs():
print vertex
结果:
igraph.Vertex(<igraph.Graph object at 0x7f783e9b5a00>,0,{'name': 1})
igraph.Vertex(<igraph.Graph object at 0x7f783e9b5a00>,1,{'name': 1})
我查看了文档,但没有找到解决这个问题的方法。
我觉得可以用 g.vs.select("name_eq")
或者 g.vs(name_eq="?")
,或者用 vector with added records
来解决,但我想要一个更简洁的方案。
比如:但这样不好。
added_vertices = set()
def add_vertex(g, name, _type="verb"):
if name not in added_vertices:
added_vertices.add(name)
g.add_vertex(name, type=_type)
我需要读取这种格式的文件:
word_1 verb_1 word_2
word_2 verb_2 word_3
word_3 verb_1 word_4
....
读取方式:
f = open('input.in', 'r')
g = igraph.Graph()
for line in f:
left, verb, right = line.strip().split("\t")
g.add_vertex(verb, type="verb")
...
有什么建议吗?
1 个回答
3
g.vs.find(name=...)
这个命令会找到第一个名字和你给的名字一样的顶点,并把它返回。如果找不到这样的顶点,它会报一个 ValueError
的错误。你可以用这个命令来写一个函数,来添加或者找到一个名字特定的顶点:
def add_or_find_vertex(g, name):
try:
return g.vs.find(name=name)
except ValueError:
g.add_vertex(name)
return g.vs.find(name=name)