Отфильтровать список объектов по атрибуту со временем

Список объектов:

[Operation(441945886, 26.08.2019, EXECUTED), Operation(41428829, 03.07.2019, EXECUTED), Operation(939719570, 30.06.2018, EXECUTED), ...]

Надо его отфильтровать по дате так, чтобы в начале списка находились самые последние операции.

Сам класс:

class Operation():


    def __init__(self, oper_id, state, date, operationAmount, description, from_card, to_card):

        self.oper_id = oper_id
        self.state = state
        self.date = self.fix_date(date)
        self.operationAmount = operationAmount
        self.description = description
        self.from_card = from_card
        self.to_card = to_card


    def fix_date(self, date):
        if isinstance(date, str):
            dt = datetime.fromisoformat(date)
            return dt.strftime('%d.%m.%Y')
        else:
            return None

      ...

Ответы (2 шт):

Автор решения: strawdog

Если вам необходимо хранить дату в экземпляре класса в виде строки, то можно сделать сортировку так. например:

lst = [Operation(41428829, "03.07.2019", "EXECUTED"), Operation(939719570, "30.06.2018", "EXECUTED"), Operation(441945886, "26.08.2019", "EXECUTED")]
lst = sorted(lst, key=lambda x:datetime.strptime(x.date, '%d.%m.%Y'), reverse=True)
for i in lst:
    print(i.oper_id)
441945886
41428829
939719570

Если же время можно хранить в формате datetime, то ту же сортировку можно сделать проще:

lst = sorted(lst, key=lambda x:x.date, reverse=True)
→ Ссылка
Автор решения: dofi4ka

Для сортировки по дате можно дополнительно хранить timestamp в экземпляре класса и по нему уже сравнивать

class Operation:
    def __init__(self, oper_id, date):
        self.oper_id = oper_id
        self.date, self.timestamp = self.fix_date(date)

    def fix_date(self, date):
        if isinstance(date, str):
            dt = datetime.fromisoformat(date)
            return dt.strftime('%d.%m.%Y'), dt.timestamp()
        else:
            return None, 0

    def __repr__(self):
        return f"{self.__class__.__name__}({self.oper_id}, {self.date})"


example_list = [
    Operation(441945886, "2019-08-26"),
    Operation(41428829, "2018-06-30"),
    Operation(939719570, "2019-07-03")
]

print(
    sorted(example_list, key=lambda o: o.timestamp, reverse=True)
)
→ Ссылка