我有一个班级:
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)
哪个不起作用。我错过了什么?
答案 0 :(得分:4)
predictions_start_order = sorted(predictions, key=lambda x: x.start)
答案 1 :(得分:2)
sorted
的key
参数采用函数,而不是属性。你在寻找的是:
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
装饰器。