如何将属性添加到networkx中的节点

时间:2018-02-09 17:57:33

标签: python python-3.x networkx

我有2个文件。第一个文件具有边和权重,并具有以下格式:

1    3     1
2    4     1
2    5     1 etc

并且第二个文件具有节点id和节点的属性:

1    attr1,attr2,attr3
2    attr2,attr4

使用第一个文件,我使用以下代码创建有向图:

G = nx.read_edgelist('myGraph.txt', create_using=nx.DiGraph(), delimiter='\t', nodetype=int, data=(('sign', int),))

然后我使用第二个文件来读取每一行。我读了第一个令牌(节点ID),我检查这个节点是否属于我的图节点,然后我再次使用split函数删除逗号。现在我想将属性保存到节点。我使用以下代码,但属性保持空白。这是我的代码:

for line in file2:
    words = line.split()
    node = words[0]
    attributes = words[1]
    splittedAttributes  = attributes.split(',')
    G.node[node]['Attributes'] = splittedAttributes 

1 个答案:

答案 0 :(得分:2)

您的代码中有一点错误:

G = nx.read_edgelist('myGraph.txt', create_using=nx.DiGraph(), delimiter='\t', nodetype=int, data=(('sign', int),))

nodetype=int您正在将节点加载为int。由于linestr,因此node也是str。如果您想使用ints,请执行以下操作:

node = int(words[0])

这应该可以解决问题。请记住以G.node[node]['Attributes']而非G[node]['Attributes']的形式访问属性,因为这会输出应该引发错误的节点nodeAttributes的权重。