【发布时间】:2020-05-08 16:33:15
【问题描述】:
我有一个包含隐含层次结构的对象的 Python(2.7 版)列表。如果一个或多个 SubThing 紧跟在一个 Thing 之后,则它们属于该 Thing。我想按事物的价值对事物进行排序,当事物被移动以进行排序时,我希望它们的子事物与它们一起移动。所有这些对象都有值。示例输入:
Thing valueA
SubThing foo
SubThing bar
Thing valueB
Thing valueC
SubThing baz
SubThing flerp
...
我在 Python 2.7 中有这方面的工作代码,但它是蛮力的并且感觉不雅 - 大约 40 行代码。首先,我创建一个中间数据结构,将事物与它们的子事物分组,然后按事物的值排序,然后展平生成的结构。
我觉得有一个优雅的一两个(或三个?)衬里。这甚至听起来像是 Schwartzian Transform 的经典机会,但我并没有做出“Pythonic”的飞跃,很容易将 SubThings 与 Things 组合在一起——也许是 itertools.groupby() 的东西?
为了清楚起见:没有父事物,子事物永远不会发生。事物可能没有 SubThings。
我通过省略一系列事物/子事物可以在不相关对象之前和之后的现实来简化。看到一个解决方案通过未分类的解决方案,即在他们所处的位置,这真是太棒了,但这对我来说并没有智力上的挑战。
【问题讨论】:
标签: python sorting data-structures