python 不考虑权重找到前 N 个加权边

python find the top N weighted edges regardless of weight

我正在寻找一种方法来找到节点中最大的 5 个加权边。有没有一种方法可以指定我想要没有特定阈值的最大 5 条边(a.k.a 对任何加权图都是通用的)?

您可以考虑按权重排序的边,并构建一个映射节点及其边的字典,按权重以非递增方式排序。

>>> from collections import defaultdict
>>> res = defaultdict(list)
>>> for u,v in sorted(G.edges(), key=lambda x: G.get_edge_data(x[0], x[1])["weight"], reverse=True):
...     res[u].append((u,v))
...     res[v].append((u,v))
... 

然后,给定一个节点(例如,0),您可以获得前 N(例如,5)条加权边作为

>>> res[0][:5]
[(0, 7), (0, 2), (0, 6), (0, 1), (0, 3)]

如果只需要对一个节点(比如0)做,可以直接做:

>>> sorted_edges_u = sorted(G.edges(0), key=lambda x: G.get_edge_data(x[0], x[1])["weight"], reverse=True)
>>> sorted_edges_u[:5]
[(0, 7), (0, 2), (0, 6), (0, 1), (0, 3)]