导入为NetworkX图后访问GraphML属性

时间:2018-03-26 20:52:41

标签: python graph import attributes networkx

我有一个以graphml格式存储的图表,其中包含一堆属性,例如

<key attr.name="label" attr.type="string" for="node" id="d0"/>

并在节点

  <data key="d0">this node's label</data>

我已使用nx.read_graphml('mygraph.graphml')导入此文件。我可以将图形可视化(使用nx.draw_networkx(imported_graph)),然后我可以再次导出它(使用nx.write_graphml(imported_graph, 'exported.txt', encoding='utf-8', prettyprint=True)),并且我看到保留了所有属性。

我希望根据节点的属性访问节点。所以我检查所有节点都有这样的属性:

for i in imported_graph.__iter__():
    print(i)
    print(nx.get_node_attributes(imported_graph, i))

我得到了

0
{}
1
{}

等等,所以没有节点有任何属性?我究竟做错了什么?

1 个答案:

答案 0 :(得分:0)

如何在networkx个节点上进行迭代?

创建节点

G = nx.Graph()
_ = [G.add_node(i, a=random.randint(1,10), b=random.randint(1,10), c=random.randint(1,10)) for i in range(20)]

迭代

for node in G.nodes(data=True):
    print(node)

[OUT]:

(0, {'a': 5, 'b': 6, 'c': 10})
(1, {'a': 3, 'b': 4, 'c': 9})
(2, {'a': 4, 'b': 3, 'c': 4})
(3, {'a': 1, 'b': 5, 'c': 2})
(4, {'a': 10, 'b': 1, 'c': 6})
(5, {'a': 10, 'b': 10, 'c': 5})
(6, {'a': 8, 'b': 9, 'c': 9})
(7, {'a': 9, 'b': 7, 'c': 5})
(8, {'a': 1, 'b': 2, 'c': 10})
(9, {'a': 8, 'b': 6, 'c': 9})
(10, {'a': 2, 'b': 4, 'c': 8})
(11, {'a': 5, 'b': 8, 'c': 3})
(12, {'a': 1, 'b': 3, 'c': 8})
(13, {'a': 3, 'b': 8, 'c': 7})
(14, {'a': 5, 'b': 5, 'c': 7})
(15, {'a': 8, 'b': 6, 'c': 5})
(16, {'a': 2, 'b': 6, 'c': 5})
(17, {'a': 6, 'b': 8, 'c': 2})
(18, {'a': 10, 'b': 6, 'c': 10})
(19, {'a': 2, 'b': 9, 'c': 6})