Присваивание атрибутов узлам сгенерированного графа - PullRequest
0 голосов
/ 05 мая 2020

Я новичок в Python и NetworkX, и я пытаюсь передать атрибуты из словаря узлам сети, созданной с помощью генератора графов. Вот мой пример кода:

g = nx.watts_strogatz_graph(5,4,0.1)

name_dict = {
  0: "Alice",
  1: "Bob",
  2: "Carl",
  3: "Diana",
  4: "Elain",
}

nx.set_node_attributes(g, name, name_dict)

Однако я получаю следующую ошибку:

    nx.set_node_attributes(g, name, name_dict)
NameError: name 'name' is not defined

Как мне определить имя атрибута ('name'), дающего значения из словарь?

1 Ответ

0 голосов
/ 05 мая 2020

NameError: name 'name' не определено

Вы получаете эту ошибку, потому что у вас нет переменной с именем name.

Давайте посмотрим на документация , которую я нашел при поиске в Google "networkx set_node_attributes":

set_node_attributes (G, values, name = None) [источник]

Устанавливает атрибуты узла из заданного значения или словарь значений.

Предупреждение

Порядок вызова значений и имени аргументов переключается между v1.x и v2.x.

Параметры

G (NetworkX Graph)

значения (скалярное значение, dict-like) - Какой атрибут узла должен быть установлен. Если значения не являются словарем, тогда оно рассматривается как одно значение атрибута, которое затем применяется к каждому узлу в G. Это означает, что если вы предоставите изменяемый объект, например список, обновления этого объекта будут отражены в узле. атрибут для каждого узла. Имя атрибута будет name.

Если значения - это dict или dict of dict, он должен быть привязан узлом либо к значению атрибута, либо к dict пар ключ / значение атрибута, используемых для обновления атрибутов узла .

name (string (необязательно, по умолчанию = None)) - Имя атрибута узла, который нужно установить, если значения являются скаляром.

Это говорит нам, что словарь должен быть второй параметр, который нужно передать, а не третий, как у вас.

Он также сообщает нам, что аргумент name является необязательной строкой.

Собрав все это вместе, вы можете исправить свою код, выполнив это:

nx.set_node_attributes(g, name_dict)

Теперь он будет запущен, но имя атрибута не будет указано. Если вы хотите, чтобы атрибут имел имя 'name', вы можете передать строку в качестве третьего параметра:

nx.set_node_attributes(g, name_dict, 'name')

TLDR; Вам нужно исправить порядок ваших параметров и сделать 'name' строку вместо переменной, заключив ее в кавычки.

...