节点对象不可迭代
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.RecordList
个 py2neo.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('_')]
.
编辑:再看一遍,我猜 r
是 Record
而 r['a']
是其他东西。您必须查看 r['a']
正在使用 type(r['a'])
的对象类型,然后查看是否有访问密钥的方法。
直接附加到 Node 对象的访问器是 properties
属性的快捷方式。因此,您将希望以与任何其他字典相同的方式遍历 r["a"].properties
。
我在尝试解析 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.RecordList
个 py2neo.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('_')]
.
编辑:再看一遍,我猜 r
是 Record
而 r['a']
是其他东西。您必须查看 r['a']
正在使用 type(r['a'])
的对象类型,然后查看是否有访问密钥的方法。
直接附加到 Node 对象的访问器是 properties
属性的快捷方式。因此,您将希望以与任何其他字典相同的方式遍历 r["a"].properties
。