You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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()

逻辑说明

  1. 用字典存储日期分组,键为进店日期,值为对应日期的所有宠物对象列表,完成同日期宠物聚合
  2. 将日期字符串转为datetime对象作为排序依据,设置reverse=True实现日期从新到旧排序
  3. 遍历每个日期分组时,仅打印一次日期分隔栏,再依次输出该分组下所有宠物的名称和主人信息,运行后输出结果与预期完全一致。

内容的提问来源于stack exchange,提问作者asker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 05:15:01