在python中通过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())

我该怎么做?

原文由 Fatemeh khodaparast 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.1k
2 个回答

您正在使用 2.0 版的 networkx。从使用 dict for G.degree() 到使用类似字典(但不是字典) DegreeView 。请参阅 本指南

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

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

原文由 rodgdor 发布,翻译遵循 CC BY-SA 3.0 许可协议

我想添加以下内容:如果您使用 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]

原文由 Victor-Alexandru Darvariu 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进