如何从字典各键中获取多个最大值(或Top N值)
网络社区分析:获取每个社区Top3最高度节点
需求背景
已基于NetworkX和community库完成网络社区聚类,生成了社区编号到节点列表的communities_dict,原代码仅能获取每个社区的单个最高度节点,现需修改为获取每个社区的Top3最高度节点。
原代码实现(获取单个最高度节点)
communities_dict = {1: ["A","B","C","D","E","F","G","CB"], 2: ["H","I","J","K","L","M","N","XY"], 3: ["O","P","Q","R","S","T","U","GT"], 4: ["V","W","X","Y","Z","AB","HH","FF"], 5: ["CD","EF","GH","IJ","KL","HG","FR","RR"]} # 加载网络图 G = nx.read_adjlist("./data/networkgraph.csv", delimiter = ',') # 聚类网络图 partition = community.best_partition(G) # 获取社区集合 communities = set(partition.values()) # 创建社区编号到对应节点的字典 communities_dict = {c: [k for k, v in partition.items() if v == c] for c in communities} # 获取每个社区最高度节点的代码 highest_degree = {k: max(v, key=lambda x: G.degree(x)) for k, v in communities_dict.items()}
原代码输出结果:
1: "A" 2: "I" 3: "Q" 4: "AB" 5: "CD"
修改后代码(获取Top3最高度节点)
只需替换获取最高度节点的代码行,实现排序取前3的逻辑:
# 获取每个社区Top3最高度节点 top3_degree = { k: sorted(v, key=lambda x: G.degree(x), reverse=True)[:3] for k, v in communities_dict.items() }
修改说明
- 用
sorted()替代max(),通过reverse=True将社区内节点按度数降序排列 - 利用切片
[:3]截取排序后的前3个节点,即为该社区的Top3最高度节点
预期输出示例
1: ["A","B","C"] 2: ["I", "J","K"] 3: ["Q","P","O"] 4: ["V","W","X"] 5: ["CD", "EF","GH"]
内容的提问来源于stack exchange,提问作者Jeff
相关产品推荐
相关产品推荐

