Как построить G Networkx, используя python dict, содержащий узлы и ребра? - PullRequest
0 голосов
/ 07 октября 2018

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

Пример:

ls = [('a', 1), ('b', 2), ('c', 3), ('a', 2), ('b', 3)]

Для достижения этого результата я импортировал библиотеку networkx.

import networkx as nx
G = nx.Graph()
G.add_edges_from(ls)

Однако, когда я преобразовал G graph в node_link_data: nx.readwrite.json_graph.node_link_data(G), я понял, что некоторые элементы (источник и цели) были инвертированы, например, второй элемент в спискекортежи были классифицированы как источник вместо цель

# original tuple
('b', 2)

# node_link_data
links: [
  {'source': 2, 'target': 'b'}
  ...
]

Итак, я создал себя диктатом {'nodes': [], 'links': []}.

Я хочу использоватьэто диктует создание графа networkx.Меня интересуют узлы мер, использующие алгоритмы этой библиотеки.

Я пытался использовать:

G = nx.Graph(myDict)

Это возвращает ошибку: TypeError: Input is not known type

Как я могупостроить этот график, используя мой dict, который уже содержит узлы и ребра?или, возможно, я могу использовать другие библиотеки для измерения степеней, кластеризации и т. д., используя вместо этого другие библиотеки.Заранее спасибо

1 Ответ

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

Таким образом, проблема заключается в том, что некоторые кортежи не организованы должным образом для последовательного преобразования из вашего списка в словарь, что вы можете сделать, это протестировать индексы кортежей следующим образом:

ls = [('a', 1), (2, 'b'), (3, 'c'), ('a', 2), ('b', 3)]
links = []
for i in ls:
    try:
        if i[0].isalpha():
            links.append({'source': i[1], 'target': i[0]})
    except AttributeError:
        links.append({'source': i[0], 'target': i[1]})

print(links)
# [{'source': 1, 'target': 'a'}, {'source': 2, 'target': 'b'}, {'source': 3, 'target': 'c'}, {'source': 2, 'target': 'a'}, {'source': 3, 'target': 'b'}]

Чтослучается, мы проверяем i[0], если он алфавитный, по крайней мере, с одним символом, если это мы добавляем это к целям и i[1] к источнику.С другой стороны, если это int, будет выдана ошибка, и мы можем использовать try/except, чтобы перехватить эту ошибку, и это говорит нам о том, что наш int находится в i[0], поэтому мы можем создать словарь с i[0] как источник и i[1] как цель.

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