Networkx - Как изменить идентификатор ребра? - PullRequest
0 голосов
/ 28 июня 2018

Я использую networkx для создания файлов graphml. У меня есть параллельные ссылки, поэтому я использую функцию MultiDiGraph. После генерации файла я открываю его в yED, но у меня нет всех соединений, которые я создал между узлами. У меня есть только те соединения (ребра), которые созданы для параллельных связей. Я понял, что это потому, что файл graphml имеет только два идентификатора ребер ('0' и '1') для всех ребер. Я изменил файл и установил уникальный идентификатор для каждого края. Например:

<edge id="0" source="Hostname_A" target="Hostname_B">
  <data key="d1">100GE1/0/0</data>
  <data key="d2">100GE1/0/0</data>
</edge>
<edge id="1" source="Hostname_A" target="Hostname_B">
  <data key="d1">100GE1/0/1</data>
  <data key="d2">100GE1/0/1</data>
</edge>
<edge id="2" source="Hostname_B" target="Hostname_C">
  <data key="d1">100GE1/1/0</data>
  <data key="d2">100GE1/0/0</data>
</edge>

Если я делаю это, то все работает нормально в YED. Есть ли способ изменить идентификаторы ребер в сети? Я думал, что мог бы изменить 'идентификатор края', если бы я установил его как атрибут, подобный этому:

g.add_edge(host,neighbor,source = intsource, destination = intdest, id=idcount)

Но я понял, что это не изменило идентификатор ребра, только добавил еще один атрибут для этого ребра:

<edge id="0" source="Hostname_A" target="Hostname_B">
  <data key="d1">100GE1/0/0</data>
  <data key="d2">100GE1/0/0</data>
  <data key="d3">1</data>   <-- This is the idcount value
</edge>

1 Ответ

0 голосов
/ 28 июня 2018

Решил это. Если вам нужно изменить 'id края' в MultiDiGraphs, вы должны использовать атрибут 'key', например:

g.add_edge(host,neighbor,key=idcount) <-- idcount is an int value
...