访问循环中节点的属性

时间:2015-09-06 05:26:45

标签: python networkx

我有以下节点列表。我想得到每个节点的经度和纬度。

('11', {'Internal': 1, 'Latitude': -31.93333, 'Country': u'Australia', 'id': 11, 'Longitude': 115.83333, 'label': u'Perth1'})
('10', {'Internal': 1, 'Latitude': -35.28346, 'Country': u'Australia', 'id': 10, 'Longitude': 149.12807, 'label': u'Canberra2'})
('13', {'Internal': 1, 'Latitude': -34.93333, 'Country': u'Australia', 'id': 13, 'Longitude': 138.6, 'label': u'Adelaide1'})
('12', {'Internal': 1, 'Latitude': -31.93333, 'Country': u'Australia', 'id': 12, 'Longitude': 115.83333, 'label': u'Perth2'})
('15', {'Internal': 1, 'Latitude': -37.814, 'Country': u'Australia', 'id': 15, 'Longitude': 144.96332, 'label': u'Melbourne1'})
('14', {'Internal': 1, 'Latitude': -34.93333, 'Country': u'Australia', 'id': 14, 'Longitude': 138.6, 'label': u'Adelaide2'})
('17', {'Internal': 1, 'Latitude': -23.7, 'Country': u'Australia', 'id': 17, 'Longitude': 133.88333, 'label': u'Alice Springs'})
('16', {'Internal': 1, 'Latitude': -37.814, 'Country': u'Australia', 'id': 16, 'Longitude': 144.96332, 'label': u'Melbourne2'})

我知道像

一样访问
G.nodes['11']['longitude']
G.nodes['10']['longitude']
G.nodes['13']['longitude'].

但我希望灵活访问,这意味着如果节点数量增加则无需更改代码。我怎么能这样做?

2 个答案:

答案 0 :(得分:3)

只需遍历节点即可。最好的"迭代节点的方法是使用G.nodes_iter()(生成器),但也可以使用G.nodes()(列表):

import networkx as nx
G=nx.Graph()
G.add_node('11', longitude = 3)
for node in G.nodes_iter():
   print G.node[node]['longitude']
> 3
G.add_node('3', longitude = 5)
for node in G.nodes_iter():
    print G.node[node]['longitude']
>3
>5

如果您关心列表中的顺序,则表示您希望使用G.nodes()并对其进行适当排序。

注意---在您的示例中,您有G.nodes[][]。那不会奏效。它应该是G.node[][]

答案 1 :(得分:3)

迭代节点最紧凑的方法如下:

for i in G:
    G.node[i]['longitude']