在python中访问networkx图的节点

时间:2014-09-18 17:05:31

标签: python graph networkx

我想访问并存储networkx图的节点,然后对其进行进一步处理。我有以下代码:

for node in vis:    
    for a,b in G[node]:
        print a,b

此代码给出以下错误:     回溯(最近一次呼叫最后):[1]

  File "C:\Users\Mrinal\workspace\algo_asgn1\prims.py", line 29, in <module>
    for a,b in G[node]:
TypeError: 'int' object is not iterable

而我写的时候:

for node in vis:
        print G[node]

我得到以下输出,我想这是一个字典,其中键作为目标节点,连接权重为值。

{2: {'weight': 5}, 3: {'weight': 2}, 4: {'weight': 2}}
{2: {'weight': 5}, 3: {'weight': 2}, 4: {'weight': 2}}
{2: {'weight': 5}, 3: {'weight': 2}, 4: {'weight': 2}}
{2: {'weight': 5}, 3: {'weight': 2}, 4: {'weight': 2}}
{2: {'weight': 5}, 3: {'weight': 2}, 4: {'weight': 2}}

我的图表包含以下数据:

1 2 5
1 3 2
2 3 4
2 4 6
1 4 2

我在这做什么错? 有人可以建议我改变。 感谢

2 个答案:

答案 0 :(得分:1)

G[node]是一本字典。 Iterating over a dictionary gives you the keys of that dictionary,在本例中为整数2,3,4。因此,如果您运行此代码段,则会得到以下输出:

>>> for a in {2: {'weight': 5}, 3: {'weight': 2}, 4: {'weight': 2}}:
...     print a
... 
2
3
4

你遇到的问题源于你试图迭代两个变量 - for a, b in x - 其中x是一个整数,因此不能分成两个独立的变量。相反,只需使用单个变量来获取节点,例如

>>> node = {2: {'weight': 5}, 3: {'weight': 2}, 4: {'weight': 2}}
>>> for a in node:
...     print a, node[a]
... 
2 {'weight': 5}
3 {'weight': 2}
4 {'weight': 2}

答案 1 :(得分:0)

我在这里弄清楚我做错了什么,我没有使用.iteritems()

for node in vis:    
    for a,b in G[node].iteritems():
        print a,b