按名称向边/顶点添加信息

时间:2012-12-10 21:34:49

标签: python igraph

我尝试将新属性值添加到某些顶点和边缘,我只能从中获取名称。

g = Graph()
g.add_vertices(["1","2","3"])
g.add_edges([("1","2"),("2","3")])

向某些顶点和边添加属性的最佳方法是什么?

我找到了以下内容,但这似乎没有必要冗长:

g.vs.find(name="1")["attribute"] = "value"
g.get_eid(g.vs.find(name="1").index, g.vs.find(name="2").index)

你不能做的是以下,我试过

g.vs["1"] # -> would return the attribute list if there would be an attribute "1"
g.get_eid("1","2") # needs integers...

是否有更好的方法通过名称引用边和顶点?

[背景:我首先尝试按顺序构建我的图形(我知道每个名称的每个顶点id)但是没有缩放(add_edge似乎有O(n²)行为)。但是现在我不知道顶点id并且不能分配边缘属性。我真的不想事先构造每个属性列表,因为我当前的add_edges()调用是一堆乱码函数]

1 个答案:

答案 0 :(得分:0)

似乎最简单的是构造一个反向字典来从名称链接到顶点(或边缘):

n2id = dict(zip(graph.vs["name"],[v.index for v in graph.vs]))
name = "J. Smith" # name of the vertices you are interested in
neighbors = graph.neighborhood(n2id[name], order=1)