gremlin python向一个顶点添加多个未知数量的属性

2024-05-16 00:27:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我想向一个顶点添加多个属性,但从一开始就不清楚这些属性可能是什么。例如,假设要将一个人作为顶点添加到图中,我们有以下属性字典:

第1个人

{
    "id": 1,
    "first_name": "bob",
    "age": 25,
    "height": 177
}

可能要添加另一个顶点,一个人具有以下属性:

第二个人

^{pr2}$

有没有一种方法可以在不显式地将属性键和值硬编码到Gremlinproperty函数的情况下将两个人都添加到图中吗?在

这个link提供了一个正确的答案。更多有用的信息可以找到here。下面的行镜像建议的解决方案,按预期执行,并在图中添加一个新顶点。伟大的。在

g.addV("person").property("id", 1, "first_name", "bob", "age", 25, "height", 177).next()

但是,它只在输入是硬编码的情况下才工作。我已经将属性字典转换为一个形式的值元组(k1,v1,k2,v2,…,kn,vn),但是我无法以编程方式传递这些值。E、 g

tup_vals = ("id", 1, "first_name", "bob", "age", 25, "height", 177)

但不管出于什么原因,我不能打电话给:

g.addV("person").property(*tup_vals).next()

上面的行没有抛出异常,只是没有按预期执行(即属性没有被传入)

有人对如何将这些属性字典以计算的方式传递到Gremlin属性函数中有什么见解吗?在


更新:幼稚/低效的解决方案

下面提供了一个解决方案,但这是一个糟糕的解决方案,因为每次迭代都会查询gremlin服务器。理想情况下,我希望同时添加所有属性。而且只有在id是唯一的情况下,才会真正起到预期的效果。在

g.addV("person").property('id', id).next()

for k,v in property_dictionary[id].items():
     g.V().has('id', id).property(k, v).iterate()

回答

感谢丹尼尔的回答。我已经修改了他的答案(如下)以符合gremlin\u python包。在

给定上下文中的Important note from this answer:keys和{}应该从源代码here中的列enum-导入。在

from gremlin_python.process.graph_traversal import __
from gremlin_python.process.traversal import Column

persons = [{"id":1,"first_name":"bob","age":25,"height": 177}, {"id":2,"first_name":"joe","surname":"bloggs","occupation":"lawyer","birthday":"12 September"}]    

g.inject(persons).unfold().as_('entity').\
    addV('entity').as_('v').\
        sideEffect(__.select('entity').unfold().as_('kv').select('v').\
                   property(__.select('kv').by(Column.keys),
                            __.select('kv').by(Column.values)
                            )
                  ).iterate()

Tags: nameidage字典属性情况property解决方案
1条回答
网友
1楼 · 发布于 2024-05-16 00:27:17

您可以将地图/词典插入遍历,为每个词典创建一个顶点,然后遍历所有词典/地图条目并将其设置为属性。在Gremlin中是这样的:

g.inject(persons).unfold().as('person').
  addV('person').as('v').
  sideEffect(select('person').unfold().as('kv').
             select('v').
               property(select('kv').by(keys), select('kv').by(values))).
  iterate()

示例:

^{pr2}$

相关问题 更多 >