python - 将 Python 列表转换为 networkx 图

标签 python python-3.x list networkx

目前我有一个列表:

[['Мама мыть', 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)

目前我被困住了,没有任何想法。任何帮助将不胜感激!

最佳答案

既然你有重复的信息,我建议先创建一个字典来确保唯一性。我添加了一个检查以确保您没有重复元素的冲突距离。

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)

关于python - 将 Python 列表转换为 networkx 图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50330413/

相关文章:

python - 正确使用 QThread.currentThreadId()

python - 在 tkinter.text 中的选项卡下方插入垂直线

C# 带有索引的列表 ConvertAll

python - 如何使用 XlsxWriter 将多种格式添加到同一文本

list - 理解 Prolog 列表和递归

c# - 指定的转换无效 - double 列表到 float 列表

python - 从python多处理进程中删除守护进程

python - 如何从 Ruby 提交 Celery 任务

python - 使用 Scrapy 和 Python 的 XPath 无法使 XPath 正常工作

Python:使用 ProcessPoolExecutor 执行