节点对象不可迭代

Node object is not iterable

我在尝试解析 MATCH 查询返回的结果集时收到此错误消息。我想要的是以某种方式将结果集转换为字典。我应该说我知道如何访问结果集的特定字段——比如 row['a']['name'],但我不喜欢的是我不能将整个 row['a'] 转换为字典或得到类似的东西row['a'].keys().

所以,这是我尝试过的:

res = graph.cypher.execute("MATCH (a:Object {id: 1}) return a")
for r in res:
    print r['a']['id'] # this works

for r in res:
    print r['a'].keys() # this does not

#what I want is something like
{x:y for (x,y) in zip(r['a'].keys(), r['a'].values()}

documentation 看来,execute 正在返回 py2neo.cypher.RecordListpy2neo.cypher.Record 对象,然后可以对其进行迭代:

for r in res:
    for v in r['a']:
        # do something with v

不幸的是,查看 source code,似乎没有明显的方法来访问列名,而无需执行 dir(r) 和过滤结果,例如[c for c in dir(r) if not c.startswith('_')].

编辑:再看一遍,我猜 rRecordr['a'] 是其他东西。您必须查看 r['a'] 正在使用 type(r['a']) 的对象类型,然后查看是否有访问密钥的方法。

直接附加到 Node 对象的访问器是 properties 属性的快捷方式。因此,您将希望以与任何其他字典相同的方式遍历 r["a"].properties