如何对链接的元组列表进行排序?

Ava*_*esh 3 python sorting tuples list topological-sort

lst = [(u'course', u'session'), (u'instructor', u'session'), (u'session', u'trainee'), (u'person', u'trainee'), (u'person', u'instructor'), (u'course', u'instructor')]
Run Code Online (Sandbox Code Playgroud)

我上面的元组的名单,我需要将它与下面的逻辑排序....每个元组的第二个元素是依赖第1个要素,如(当然,会议)上 - >会议是依赖于课程等..

我想要一个基于其依赖的优先级的排序列表,较少或独立的对象将首先出现,因此输出应如下所示,

lst = [course, person, instructor, session, trainee]
Run Code Online (Sandbox Code Playgroud)

Ale*_*lli 5

你正在寻找所谓的拓扑排序.维基百科页面显示了经典的Kahn和深度优先搜索算法; Python示例在这里(有点过时,但应该运行正常),在pypi上(稳定且可重用 - 你也可以在这里阅读代码)和这里(Tarjan的算法,那种类型也处理依赖项中的循环)指定),仅举几例.