如何在Python中按日期对类对象及其属性进行排序
Python宠物进店记录打印问题修复
问题原因
- 原代码未对宠物列表做排序、分组处理,遍历顺序为宠物添加顺序,相同日期的宠物没有聚合
- 原代码中
if pet.entryDate == pet.entryDate的判断条件恒成立,每遍历一条宠物记录就打印一次日期分隔栏,导致每条记录都单独携带日期栏
修复后完整代码
from datetime import datetime class Petshop(): def __init__(self, entryDate, name, ownerName): self.entryDate = entryDate self.name = name self.ownerName = ownerName class Pets(): def __init__(self): self.petsList = [] def addPets(self, entryDate, name, ownerName): entry_pet = Petshop(entryDate, name, ownerName) self.petsList.append(entry_pet) def printPets(self): # 按日期分组 date_groups = {} for pet in self.petsList: if pet.entryDate not in date_groups: date_groups[pet.entryDate] = [] date_groups[pet.entryDate].append(pet) # 按日期从新到旧排序 sorted_dates = sorted(date_groups.keys(), key=lambda x: datetime.strptime(x, '%m/%d/%Y'), reverse=True) # 按分组打印 for date in sorted_dates: print(f"--------------- {date} ------------------") for pet in date_groups[date]: print(f"Name: {pet.name}") print(f"Owner name: {pet.ownerName}") pet = Pets() pet.addPets('04/13/2021','Pinky', 'David Smith') pet.addPets('07/10/2020', 'Charlie', 'Joe Davis') pet.addPets('12/22/2018', 'Teddy', 'Carl Johnson') pet.addPets('07/10/2020', 'Kenny', 'Susan Jones') pet.addPets('04/13/2021','Max', 'Bryan Miller') pet.addPets('07/10/2020', 'Buddy', 'Kathy Brown') pet.printPets()
逻辑说明
- 用字典存储日期分组,键为进店日期,值为对应日期的所有宠物对象列表,完成同日期宠物聚合
- 将日期字符串转为
datetime对象作为排序依据,设置reverse=True实现日期从新到旧排序 - 遍历每个日期分组时,仅打印一次日期分隔栏,再依次输出该分组下所有宠物的名称和主人信息,运行后输出结果与预期完全一致。
内容的提问来源于stack exchange,提问作者asker
相关产品推荐
相关产品推荐

