通过Networkx在python中获取图形中每个节点的度数

时间:2017-11-22 11:26:49

标签: python-3.x networkx

假设我有一个如下所示的数据集,显示无向图:

1   2
1   3
1   4
3   5
3   6
7   8
8   9
10  11

我有一个类似的python脚本:

for s in ActorGraph.degree():
    print(s)

这是一个字典,由键和值组成,键是节点名称,值是节点的程度:

('9', 1)
('5', 1)
('11', 1)
('8', 2)
('6', 1)
('4', 1)
('10', 1)
('7', 1)
('2', 1)
('3', 3)
('1', 3)

networkx文档中建议使用values()来获得节点度。 现在我喜欢只有节点程度的键,我使用脚本的这一部分,但它确实工作并说object has no attribute 'values'

for s in ActorGraph.degree():
        print(s.values())

我该怎么办?

2 个答案:

答案 0 :(得分:7)

您使用的是networkx 2.0版。从使用dict G.degree()改为使用dict-like(但不是dict)DegreeView后,情况发生了变化。请参阅this guide

要获得列表中的学位,您可以使用list-comprehension

degrees = [val for (node, val) in G.degree()]

答案 1 :(得分:2)

我想添加以下内容:如果要使用nx.Graph()初始化无向图,然后再添加边,请注意,networkx不保证节点的顺序将被保留-这也适用于degree()。这意味着,如果您使用列表理解方法,然后尝试通过列表索引访问度,则索引可能不对应正确的节点。如果您希望它们对应,则可以执行以下操作:

degrees = [val for (node, val) in sorted(G.degree(), key=lambda pair: pair[0])]

这是一个简单的例子来说明这一点:

>>> edges = [(0, 1), (0, 3), (0, 5), (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (2, 5)]
>>> g = nx.Graph()
>>> g.add_edges_from(edges)
>>> print(g.degree())
[(0, 3), (1, 4), (3, 3), (5, 2), (2, 4), (4, 2)]
>>> print([val for (node, val) in g.degree()])
[3, 4, 3, 2, 4, 2]
>>> print([val for (node, val) in sorted(g.degree(), key=lambda pair: pair[0])])
[3, 4, 4, 3, 2, 2]