使用gremlin python以列表作为属性值过滤边

使用gremlin python以列表作为属性值过滤边,python,gremlin,tinkerpop3,amazon-neptune,Python,Gremlin,Tinkerpop3,Amazon Neptune,我存储了一个列表作为图中某些边的属性值,类似于问题。这个问题的解决方案是用JavaScript给出的,但我正在寻找一种用Python做同样事情的方法 另外,请注意,Amazon Neptune不支持Lambda,因此解决方案无法使用Lambda。我不确定这是否仍然是您的问题,但我想知道这是否对您不起作用: gremlin> g = TinkerGraph.open().traversal() ==>graphtraversalsource[tinkergraph[vertices:0

我存储了一个列表作为图中某些边的属性值,类似于问题。这个问题的解决方案是用JavaScript给出的,但我正在寻找一种用Python做同样事情的方法


另外,请注意,Amazon Neptune不支持Lambda,因此解决方案无法使用Lambda。

我不确定这是否仍然是您的问题,但我想知道这是否对您不起作用:

gremlin> g = TinkerGraph.open().traversal()
==>graphtraversalsource[tinkergraph[vertices:0 edges:0], standard]
gremlin> g.addV('person').as('a').addE('self').to('a').property('x',[1,2,3]).select('a').addE('self').to('a').property('x',[10,20,30]).iterate()
gremlin> g.E().valueMap(true)
==>[x:[1,2,3],id:3,label:self]
==>[x:[10,20,30],id:4,label:self]
gremlin> g.V().outE('self').filter(local(values('x').unfold().is(2))).valueMap(true)
==>[x:[1,2,3],id:3,label:self]
基本上,您可以展开列表属性的
local()
,然后在此基础上进行筛选。Neptune可能不会优化此过滤器(例如,使用索引),但如果您不过滤大量边,这可能是一个足够的解决方法(如果可行)

请注意,我在Groovy中编写了上述代码,以便轻松地进行测试。在Python中,您必须注意围绕命名冲突的某些小语法修改。因此,最后一次遍历在python中是这样写的(因为
在python中是一个保留字):

g.V().outE('self').filter(local(values('x').unfold().is_(2))).valueMap(true)