Преобразование списка Python в график networkx - PullRequest
0 голосов
/ 14 мая 2018

В настоящее время у меня есть список:

[['Мама мыть', 10, 'рама'],
 ['Мама мыть', 10, 'рама', 5, 'долго'],
 ['Мама мыть', 10, 'рама', 3, 'вчера'],
 ['Мама мыть', 10, 'рама', 3, 'вчера', 1, 'поздно']]

Мне нужно как-то преобразовать его в ребра Networkx, где пары слов должны становиться узлами графа, а целые числа между ними становятся весами:

G = nx.Graph()
G.add_edge('Мама мыть', 'рама', weight=10)
G.add_edge('рама', 'долго', weight=5)
G.add_edge('рама', 'вчера', weight=3)
G.add_edge('вчера', 'поздно', weight=1)

В настоящее время я застрял и понятия не имею. Любая помощь будет оценена!

1 Ответ

0 голосов
/ 14 мая 2018

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

In [1]:
distances = {}
for row in l:
    for i in range(0, len(row)-1, 2):
        key_tuple = (row[i], row[i+2])
        d = row[i+1]
        if key_tuple in distances.keys():
            if distances[key_tuple] != d:
                print("Warning: Found a conflicting distance for {}: {} and "
                      "{}. Using last".format(key_tuple, distances[key_tuple], d))
        distances[key_tuple] = d

In [2]: distances
Out[2]:
 {('Мама мыть', 'рама'): 10,
 ('рама', 'долго'): 5,
 ('рама', 'вчера'): 3,
 ('вчера', 'поздно'): 1}

Затем вы можете создать свои ребра, используя этот словарь.

In [3]:
import networkx as nx
G = nx.Graph()
for k, v in distances.items():
    G.add_edge(k[0], k[1], weight=v)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...