如何从Python介数中心性得分字典中提取输出Top10节点
可用实现方案
方案1:内置sorted快速实现
对4039个节点的字典规模来说,直接用Python内置的sorted方法做全量排序后截取前10项,完全没有性能压力,写起来也最直接。
核心代码:
# 按得分从高到低排序,取前10个节点对 top10 = sorted(bt.items(), key=lambda x: x[1], reverse=True)[:10]
逻辑说明:
bt.items()遍历字典所有的「节点编号-得分」映射对key=lambda x: x[1]指定排序时按元组中的得分值比较,避免默认按节点编号排序reverse=True设置为降序排列[:10]切片直接取排序后的前10个元素
如果需要规整输出,直接遍历结果打印即可:
for idx, (node, score) in enumerate(top10, start=1): print(f"排名{idx} | 节点ID: {node} | 介数中心性得分: {score:.6f}")
方案2:基于heapq的高性能TopN筛选
如果后续节点规模会进一步扩大,可以用标准库heapq的nlargest方法实现,它不需要对全量数据做完整排序,仅维护一个容量为10的最小堆来筛选最大值,时间复杂度远低于全量排序。
核心代码:
import heapq # 直接筛选得分最高的10个映射对 top10 = heapq.nlargest(10, bt.items(), key=lambda x: x[1])
对当前4039个节点的规模,两种方法的运行耗时基本没有差异,但heapq.nlargest的写法更贴合TopN筛选的语义,性能优势会在节点规模达到十万级以上时明显体现。
补充说明
- 两种方法均为稳定排序,遇到得分完全相同的节点时,会保持原字典中的相对顺序,不会出现乱序
- 介数中心性的浮点得分可以直接作为排序依据,不需要额外做格式转换,内置排序逻辑完全兼容
内容的提问来源于stack exchange,提问作者Zerone
相关产品推荐
相关产品推荐

