Gremlin Python如何获取顶点ID列表间的所有关联边?
获取指定顶点列表间关联边的Gremlin Python正确写法
我来帮你搞定这个问题!你想要获取顶点列表a = [0,2,4,6,8,10]中所有顶点之间的关联边,之前的几个写法要么返回结果不对,要么因为Gremlin Python的语法细节报错,我给你逐一拆解问题,再给出正确解法:
你之前写法的问题分析
第一个代码
g.V(a).outE().inV().hasId(a).toList():
这段查询最后返回的是顶点(因为你调用了inV()),而不是你需要的边,所以即使有符合条件的边,也只会返回边连接的目标顶点,不是边本身,自然得不到你要的结果。第二个代码
g.V(a).bothE().filter(otherV().hasId(a)).toSet():
在Gremlin Python中,引用Gremlin的步骤(比如otherV()、where()等)需要加上__前缀,否则Python会把otherV()当成本地未定义的函数,所以报错“otherV未定义”。第三个代码
g.V(a).bothE().otherV().hasId(a).toList():
和第一个问题一样,最后返回的是另一个顶点,不是边,所以结果为空或者不符合预期的顶点列表。
正确解法
方法一:从指定顶点出发过滤边
通过bothE()遍历顶点的双向边,再用filter结合__.otherV()过滤另一个端点也在目标列表中的边,最后返回边:
a = [0,2,4,6,8,10] # 注意这里要用__.otherV(),__是Gremlin Python中引用步骤的前缀 edges = g.V(a).bothE().filter(__.otherV().hasId(a)).toList()
方法二:直接过滤所有边
也可以直接遍历所有边,筛选出两个端点都在目标顶点列表中的边:
a = [0,2,4,6,8,10] edges = g.E().where(__.outV().hasId(a)).and(__.inV().hasId(a)).toList()
这两种方法都能得到你需要的、连接列表中顶点的所有关联边。
内容的提问来源于stack exchange,提问作者Tushar Aggarwal




