Как отсортировать по атрибуту 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)