如何基于节点属性对NetworkX图的节点及节点子集进行排序
全量节点按dist属性排序
你之前的写法没有指定排序规则,默认会按节点ID升序排列。只要给sorted函数加上key参数指定排序依据即可:
- 同时返回节点ID和对应的所有属性:
sorted_nodes = sorted(G.nodes(data=True), key=lambda item: item[1]["dist"])
- 仅返回排序后的节点ID列表:
sorted_node_ids = sorted(G.nodes, key=lambda node: G.nodes[node]["dist"])
如果需要按dist降序排序,额外加上reverse=True参数即可:
sorted_nodes_desc = sorted(G.nodes(data=True), key=lambda item: item[1]["dist"], reverse=True)
节点子集按dist属性排序
不需要先排序全量节点,直接对子集列表调用sorted函数,指定key从图中读取对应节点的dist属性即可,性能远高于先排序全量再过滤的方案。
假设你的节点子集为node_subset,示例代码如下:
node_subset = [2, 5, 7, 9] # 替换为你自己的节点子集 sorted_subset = sorted(node_subset, key=lambda node: G.nodes[node]["dist"])
提示:如果存在节点未配置dist属性,运行时会抛出KeyError,可根据需要在lambda函数中加默认值处理,比如把key改成lambda x: x[1].get("dist", 0)即可将无dist属性的节点默认排序值设为0
内容的提问来源于stack exchange,提问作者mufassir
相关产品推荐
相关产品推荐

