Python3 и networkx = 2.2: set_node_attributes и получение недоступного типа: 'dict' - PullRequest
0 голосов
/ 08 октября 2018

Я использую networkx, но я пытаюсь добавить новый атрибут для графика, используя

nx.set_node_attributes(G, 'Pi', PiDict)

Я получаю:

  File "/usr/local/lib/python3.5/dist-packages/networkx/classes/function.py", line 656, in set_node_attributes
    G.nodes[n][name] = values

TypeError: unhashable type: 'dict'

G:

nx.info(G)
Out[5]: 'Name: \nType: DiGraph\nNumber of nodes: 20\nNumber of edges: 72\nAverage in degree:   3.6000\nAverage out degree:   3.6000'

PiDict - это словарь:

{0: 0.12500000001440292,
 1: 0.03125000000360126,
 2: 0.03125000000360079,
 3: 0.03125000000360083,
 4: 0.03125000000360079,
 5: 0.12499999999611916,
 6: 0.031249999999029825,
 7: 0.031249999999029828,
 8: 0.031249999999029828,
 9: 0.03124999999902983,
 10: 0.12499999999082015,
 11: 0.03124999999770508,
 12: 0.03124999999770508,
 13: 0.03124999999770508,
 14: 0.031249999997705075,
 15: 0.12499999999865749,
 16: 0.03124999999966442,
 17: 0.03124999999966442,
 18: 0.031249999999664425,
 19: 0.03124999999966442}

Я решил это с помощью

nx.set_node_attributes(G, 'Pi', 1)
for i,value in enumerate(PiList):
    G.nodes[i]['Pi'] = PiDict[i]

В чем проблема с моим предыдущим кодом?Есть ли правильный способ ее решить?

1 Ответ

0 голосов
/ 08 октября 2018

Попробуйте использовать другой порядок аргументов.

nx.set_node_attributes(G, PiDict, 'Pi')

Что ваше решение сделало, так это присвоило каждому узлу атрибут с именем 1 и значением 'Pi'.Затем вы присваиваете каждому узлу еще один атрибут 'Pi', значением которого является желаемое значение.Чтобы проверить это, выполните G.nodes(data=True) после назначения атрибутов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...