添加顶点和重复的名称

时间:2014-05-03 18:10:02

标签: python igraph

我正在使用IGRAPH for python。 我想知道有没有办法插入顶点不存在

E.g:

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})

我检查了文档,但找不到任何方法来解决问题。

我认为index = g.vs.select("name_eq")或index = 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 个答案:

答案 0 :(得分: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)