Python - 获取用户定义类的排序列表

时间:2011-10-29 19:51:13

标签: python class list user-defined-types

我有一个班级:

class Prediction():
    def __init__(self, l):
        self.start = l[0]
        self.end = l[1]
        self.score = l[2]

一个列表,其中每个元素都是Prediction。它恰当地命名为predictions

我想按predictions类的start属性对Prediction进行排序。

这样的事情:

predictions_start_order = sorted(predictions, key=start)

哪个不起作用。我错过了什么?

2 个答案:

答案 0 :(得分:4)

predictions_start_order = sorted(predictions, key=lambda x: x.start)

答案 1 :(得分:2)

sortedkey参数采用函数,而不是属性。你在寻找的是:

class Prediction():
    def __init__(self, l):
        self.start = l[0]
        self.end = l[1]
        self.score = l[2]

    def __lt__(self, other):
        return self.start < other.start

这将允许sorted自动为此类的可迭代实例排序。

在Python中只需要__lt__进行排序,但PEP8建议您实施所有丰富的比较或使用total_ordering装饰器。