【发布时间】:2013-02-06 07:06:34
【问题描述】:
我有一个描述层次结构的列表,如下所示:
[obj1, obj2, [child1, child2, [gchild1, gchild2]] onemoreobject]
其中,child1(和其他)是 obj2 的孩子,而 gchild1 和 2 是孩子 2 的孩子。
每个对象都有date 之类的属性,例如,我想根据这些属性对它们进行排序。在常规列表中,我会这样:
sorted(obj_list, key=attrgetter('date'))
在这种情况下,尽管如此,该方法不起作用,因为列表没有date 属性......即使它有,如果它的属性与其父级不同,那么层次顺序就会被破坏。在 python 中是否有一种简单而优雅的方法来做到这一点?
【问题讨论】:
-
这看起来将是一个完美的树结构数据集。
-
你能提供想要的输出吗?您想在保持层次结构的同时按字典顺序对列表进行排序吗?即,
[obj2, obj1, [child1, child2, [gchild1, gchild2]] onemoreobject]将排序为[obj1, [child1, child2, [gchild1, gchild2]], obj2, onemoreobject]? -
如前所述,所需的输出将取决于名为
date的对象属性。如果日期以这种方式排列,您的示例将是有效的,但我绝不打算根据对象名称进行排序。因此,如果obj1.date排在第二位,obj2.date排在第一位,则列表的这一部分应如下所示:[obj2, [child1, child2, [gchild1, gchild2]], obj1]