Как отсортировать по атрибуту surname класса Abonent список

Отсортировать список абонентов, в данном случае all_obj в алфавитном порядке, по фамилиям которые находятся в данном списке на втором месте(surname - атрибут класса Abonent).

Как отсортировать по атрибуту surname класса Abonent список all_obj?

Пример: фамилия в классе obj1 начинается с буквы Б, в классе obj2 с буквы А, в классе obj3 с буквы С.

Как сделать чтобы список из [obj1, obj2, ob3] получился таким [obj2, obj1, obj3] ?

class Abonent:
    """
    Класс Абонент: Идентификационный номер, Фамилия, Имя, Отчество, Адрес, Номер кредитной карточки, Дебет, Кредит, Время междугородных и городских переговоров;
    Конструктор; Методы: установка значений атрибутов, получение значений атрибутов, вывод информации.
    Создать массив объектов данного класса. Вывести сведения относительно абонентов, у которых время городских переговоров превышает заданное.
    Сведения относительно абонентов, которые пользовались междугородной связью. Список абонентов в алфавитном порядке.


    #TODO Осталось:
    Список абонентов в алфавитном порядке.
    """
    def __init__(self, identifier, surname, name, middle_name, adress, credit_card_number, debet, credit, time_intercity, time_city):
        self.identifier = identifier
        self.surname = surname
        self.name = name
        self.middle_name = middle_name
        self.adress = adress
        self.credit_card_number = credit_card_number
        self.debet = debet
        self.credit = credit
        self.time_city = time_city
        self.time_intercity = time_intercity 

        self.get_atributes()

    def get_atributes(self):
        """установка значения атрибутов и получение значений атрибутов"""

        """
        self.identifier = input("Введите ID: ")
        self.surname = input("Введите Фамилию: ")
        self.name = input("Введите Имя: ")
        self.middle_name = input("Введите Отчество: ")
        self.adress = input("Введите Адресс: ")
        self.credit_card_number = input("Номер кредитной карты: ")
        self.debet = input("Введите Дебет: ")
        self.credit = input("Введите Кредит: ")
        self.time_city = input("Введите время городских переговоров.\nВремя переговоров: ")
        """
        self.time_intercity = input("Введите время междугородных переговоров, по примеру: 1:30, если их не было напишите \"Нет\"\nВремя переговоров: ")

    def person_time(self):
        return self.time_intercity

    def info(self):
        """вывод информации"""
        print("ID: "+str(self.identifier), "\nФамилия: "+str(self.surname), "\nИмя: "+str(self.name), "\nОтчество: "+str(self.middle_name),\
            "\nАдресс: "+str(self.adress), "\nНомер кредитной карточки: "+str(self.credit_card_number), "\nДебит: "+str(self.debet), \
            "\nКредит: "+str(self.credit), "\nВремя междугородных переговоров: "+str(self.time_intercity), "\nВремя городских переговоров: "+str(self.time_city))

    def str_to_time(self):
        """Вводим строку, получаем время"""
        if self.time_intercity == "Нет":
            return self.time_intercity
        str_date = self.time_intercity.split(":")
        str_date = str_date[0]
        return int(str_date)

def main():
    all_obj = []
    obj1 = Abonent("1281002", "Фамилия1", "Имя1", "Отчество1", "Какой-то адресс", "378282246310005", "400", "0", "1:10", "0:05")
    all_obj.append(obj1)
    obj2 = Abonent("1218492", "Фамилия2", "Имя2", "Отчество2", "Какой-то адресс", "37223246310045", "200", "0", "0:45", "0:35")
    all_obj.append(obj2)
    obj3 = Abonent("1218492", "Фамилия3", "Имя3", "Отчество3", "Какой-то адресс", "37223246310045", "400", "0", "1:00", "0:55")


    all_obj.append(obj3)
    # Выводим всю информацию списка, на всякий случай оставлю
    """
    for obj in all_obj:
        obj.info()
    """
    # Выводим справку, если время переговоров превышает время лимита
    for obj in all_obj:
        try:
            user_time = obj.str_to_time()
            # 1 - это один час
            if user_time == "Нет":
                pass
            elif 0 <= user_time < 1:
                obj.info()
                print("*Данный пользователь пользовался междугородной связью*\n")
            elif user_time >= 1:
                obj.info()
                print("*Данный пользователь пользовался междугородной связью*")
                print("**Пользователю выдана справка о том, что время междугородных переговоров превысило время лимита**\n")
        except:
            print("\nПользователь указал время не правильно!")
if __name__ == "__main__":
    main()

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

Автор решения: Михаил Муругов

Если Вы хотите получить новый отсортированный список, то:

sorted(all_obj, key=lambda obj: obj.surname)

Если хотите отсортировать сам список all_obj, то:

all_obj.sort(key=lambda obj: obj.surname)
→ Ссылка