#python #json #dictionary #graph #gremlin
#python #json #словарь #График #gremlin
Вопрос:
Я использую gremlin-python
библиотеку для обхода и обработки графика. Для того, что я создаю, я хотел бы извлечь подграфы из графика и сохранить их в виде словаря некоторого формата (мне нравится формат JSON, который Dgraph возвращает для запросов). Другими словами, я хотел бы выполнить некоторый запрос / обход моего графика и сохранить выходные данные в виде словаря Python.
Одна вещь, которую я сделал, это:
g.io("graph.json").write().iterate()
который записывает весь график и его структуру в файл JSON. Во-первых, возможно ли сохранить этот JSON в переменной в виде словаря Python, а не записывать в файл? Во-вторых, возможно ли сделать то же самое, но для результата обхода, а не для всего графика?
Я полностью открыт для любых других методов возврата результатов обхода в объект словаря.
Комментарии:
1. Когда вы говорите, что хотите получить весь график целиком, вы имеете в виду получение также вершины и их ребер. В этом случае я не уверен, какую схему JSON вы будете использовать для хранения всего вложенного объекта.
2. На самом деле я бы предпочел не получать весь график целиком — только подграф, возвращаемый моим запросом. И на самом деле довольно легко сохранить всю структуру графика, сохранив каждый узел как объект верхнего уровня, а исходящие ребра, которые он имеет к соседним узлам, как объекты второго уровня.
Ответ №1:
Отвечаю на ваши вопросы:
Можно ли сохранить этот JSON в переменной в виде словаря Python
Да, JSON — это удобочитаемый формат обмена данными, который может хранить или передавать объекты данных в словарных и массивных типах данных.
JSON в словарь Python:
import json
# some JSON:
x = '{ "name":"John", "age":30, "city":"New York"}'
# parse x:
y = json.loads(x)
# the result is a Python dictionary:
print(y["age"])
Python в JSON:
import json
# a Python object (dict):
x = {
"name": "John",
"age": 30,
"city": "New York"
}
# convert into JSON:
y = json.dumps(x)
# the result is a JSON string:
print(y)
Возможно ли сделать то же самое, но для результата обхода
вместо всего графика
Да, вы можете использовать приведенный ниже запрос, чтобы получить весь подграф данной вершины.
g.V(349).
repeat(outE().
otherV()).
emit().
path().
by(valueMap(true)).
toList()
Это вернет массив, который может быть преобразован в JSON с использованием функций дампа.