python中的排序列表 - 优先

时间:2015-12-02 20:09:13

标签: python list sorting

我有两个列表,每个列表都由date的对象组成。我试图将它们组合起来然后按日期排序:

combined = invoices + payments
combined.sort(key = lambda x: x.date)

一切都很好。但是,如果同一天有invoice个对象和payment对象,我希望将payment放在invoice之前的列表中。

3 个答案:

答案 0 :(得分:6)

请改为:

combined = payments + invoices

python iterable.sort方法保证稳定。 (See python docs on standar types, 5.6.4 note 9

这意味着如果您的列表中有ab两个元素key(a) == key(b),那么他们将保持相对顺序(即{{1} }}被放置在未排序列表的a之前,在它排序之后仍然是这样的。

答案 1 :(得分:2)

你应该可以做这样的事情来获得你想要的分类:

index.html

这个想法是,只要对象是不同的,您就可以创建一个排序元组,其中包含对象来自哪个列表的指示符。如果日期匹配,那么它将按日期排序,然后转到第二个字段。

答案 2 :(得分:0)

除了cmp=之外,您还可以在sort函数中使用class Invoice(object): P = 1 def __init__(self, date): self.date = date class Payment(object): P = 0 def __init__(self, date): self.date = date l = [Invoice(10), Payment(10), Invoice(10)] def xcmp(x, y): c0 = cmp(x.date, y.date) return c0 if c0 != 0 else cmp(x.__class__.P, y.__class__.P) l.sort(cmp=xcmp)

Row_Number