You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NetworkX类Git图的时间拓扑排序:字典序拓扑排序使用咨询

关于NetworkX拓扑排序结合日期排序的问题解答

1. 是否可以用lexicographical_topological_sort实现拓扑顺序+日期排序?

完全可以。lexicographical_topological_sort的核心作用就是在满足拓扑排序的依赖关系前提下,通过自定义的key函数对无依赖的节点(即拓扑排序中可并列选择的节点)进行排序,以此打破平局。用提交日期(timestamp)作为键,正好符合需求——既保证提交的依赖顺序(拓扑顺序),又让同层级的提交按时间先后排列。

2. 正确调用方式与节点属性访问问题

调用方式的关键在于节点的存储形式:

  • 如果你的节点是自定义类的实例(比如每个节点对应一个提交对象,自带timestamp属性):
    你最初的写法是可行的,lambda n: n.timestamp可以直接访问节点对象的属性,因为n就是传入的节点实例,不会被自动转成字符串或哈希值。示例代码:
    import networkx as nx
    
    # 自定义提交类,包含timestamp属性
    class Commit:
        def __init__(self, sha, timestamp):
            self.sha = sha
            self.timestamp = timestamp
    
    # 构建有向图
    G = nx.DiGraph()
    commit1 = Commit("abc123", 1620000000)
    commit2 = Commit("def456", 1620001000)
    G.add_edge(commit1, commit2)
    
    # 执行排序
    sorted_commits = list(nx.lexicographical_topological_sort(G, key=lambda n: n.timestamp))
    
  • 如果你的节点是字符串/哈希值(比如用提交SHA作为节点ID,timestamp存在节点的属性字典中):
    此时需要通过图的nodes属性获取节点的timestamp,写法改为lambda n: G.nodes[n]['timestamp']。示例代码:
    import networkx as nx
    
    G = nx.DiGraph()
    # 添加节点时附带timestamp属性
    G.add_node("abc123", timestamp=1620000000)
    G.add_node("def456", timestamp=1620001000)
    G.add_edge("abc123", "def456")
    
    # 执行排序
    sorted_commits = list(nx.lexicographical_topological_sort(G, key=lambda n: G.nodes[n]['timestamp']))
    

内容的提问来源于stack exchange,提问作者Lorah Attkins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 19:38:16