创建嵌套字典

时间:2020-01-13 16:53:37

标签: python networkx

我是python的新手,仍然每天学习和研究新事物。我有一个具有以下结构的文本文件

unittests.py

我想创建一个嵌套字典,该字典将以年度有向网络图的形式捕获此信息。 fileIn [0]年,fileIn [1]是源节点,fileIn [2]目标节点,fileIn [3]是权重。 defaultdict将用于捕获网络的其他属性。 目前,我正在运行以下代码,这给了我一个空图。另外,当我运行短代码时,出现错误networkx没有属性Digraph。 任何帮助将不胜感激。预先感谢

2011    1   2   4043.428261
2011    1   3   1129.99031
.       .   .   .
.       .   .   .
2012    1   4   2610.262872
2012    1   5   1526.420342
.       .   .   .
.       .   .   .
2013    1   6   497.5094923
2013    1   7   6666.273778
.       .   .   .
.       .   .   .
2014    1   8   502.258575
2014    1   9   1134.696447

1 个答案:

答案 0 :(得分:0)

我相信这应该可以满足您的要求:

import networkx as nx
import networkx.drawing
from collections import defaultdict
import matplotlib.pyplot as plt

G = nx.Graph()
graphs = {}
year_id = ('2011', '2012', '2013', '2014')

fileIn = open("Data3.txt", 'r').readlines()
for line in fileIn:
    line = line.strip('\n')
    year, u, v, amount = [n for n in ' '.join(line.split("\t")).split(' ') if n]
    this_year_id = year = year_id.index(year)

    if this_year_id not in graphs.keys():
        graphs[this_year_id] = nx.DiGraph(G)

    graphs[this_year_id].add_weighted_edges_from([(u, v, amount)])

for i, graph in graphs.items():
    ax = plt.subplot(221 + i)
    ax.set_title(str(2011+i))
    nx.draw(graphs[0], with_labels=True, font_weight='bold')

plt.show()

正如@sim所指出的,您想要的是DiGraph,而不是Digraph,这是导致您出错的原因。

原始代码的另一个问题是在循环中将year_id元组分配给year,因此G拥有的唯一密钥是('2011', '2012', '2013', '2014')。边缘也从未真正放在图上。