添加顶点并重复名称

0 投票
1 回答
524 浏览
提问于 2025-04-18 05:15

我正在使用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)

撰写回答