2015-07-10 7 views
0

Я получаю это сообщение об ошибке при попытке проанализировать набор результатов, возвращенный MATCH. Я хочу, чтобы каким-то образом преобразовать набор результатов в словарь. Я должен сказать, что я знаю, как получить доступ к определенным полям набора результатов - например, row['a']['name'], но мне не нравится, что я не могу преобразовать весь row['a'] в словарь или получить что-то вроде row['a'].keys().Объект узла is not itable

Итак, это то, что я пробовал:

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()} 

ответ

1

Из 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']), а затем посмотреть, есть ли способ доступа к ключам.

1

Аксессоры, непосредственно привязанные к объекту узла, являются ярлыком для атрибута properties. Поэтому вам нужно будет проходить через r["a"].properties так же, как и любой другой словарь.

+0

Отличный ответ! Спасибо, сэр! – Jacobian

Смежные вопросы