节点对象不可迭代

时间:2015-07-10 09:22:37

标签: python neo4j py2neo

当我尝试解析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()}

2 个答案:

答案 0 :(得分:1)

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'])的对象类型,然后查看是否有方法可以访问密钥。

答案 1 :(得分:1)

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