Я думаю, что Sparky05 имеет лучший ответ для вас - а именно, что другая команда будет обрабатывать формат, который вы пытаетесь использовать (хотя я бы порекомендовал использовать int вместо строк).
Этот ответ объясняет, что не так со структурой, которую вы использовали.
Из документации для make_small_graph
:
make_small_graph (graph_description, create_using = None)
graph_description
- это список вида [ltype,name,n,xlist]
Здесь ltype
- это один из "adjacencylist"
или "edgelist"
, name
- это имя графа и n
- количество узлов. Это создает график из n узлов с целочисленными метками 0,..,n-1
.
Если ltype
= "adjacencylist"
, то xlist
- это список смежности с ровно n
записями, в котором j-я запись (которая может быть пустой) указывает узлы, связанные с вершиной j.
... Используйте аргумент create_using
, чтобы выбрать класс / тип графика.
Итак, вы ввели gr
, который является диктатом, ключи которого являются строками. Но он ожидает чего-то совсем другого: список, для которого gr[0]
должен быть либо "adjacencylist"
, либо "edgelist"
, а другие элементы которого дают другую информацию о графике.
Таким образом, вы должны сделать свой ввод списком, первый элемент которого сообщает формат вашей информации о структуре графа. Тогда вторым элементом вашего списка должно быть имя, которое вы даете своему графику. Следующим элементом должно быть количество узлов в вашем графике. Конечная запись должна быть либо списком ребер, либо списком, дающим узлы, смежные с каждым узлом.
Итак, как я понимаю ваше намерение, вам нужен ориентированный граф (иначе 4 будет иметь ребро также равным 0, а не просто 0, имеющее ребро 4):
gr = ['adjacencylist', 'my_graph', 6, [[4], [3], [2,3,4,5], [1,3], [3], [4]]]
G = nx.make_small_graph(gr, create_using = nx.DiGraph)
В документации показано несколько конкретных примеров, поэтому взгляните на них.