我有下一個代碼:
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):
for pet in self.petsList:
if pet.entryDate == pet.entryDate:#Here I try to sort by date
print("---------------",pet.entryDate,'------------------')
print("Name:", pet.name)
print("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()
使用該代碼,我想按日期對寵物條目進行排序,因此例如我希望列印下一個:
--------------- 04/13/2021 ------------------
Name: Pinky
Owner name: David Smith
Name: Max
Owner name: Bryan Miller
--------------- 07/10/2020 ------------------
Name: Charlie
Owner name: Joe Davis
Name: Kenny
Owner name: Susan Jones
Name: Buddy
Owner name: Kathy Brown
--------------- 12/22/2018 ------------------
Name: Teddy
Owner name: Carl Johnson
但不是這樣,我可以列印每個物件,這不是我所期望的:
--------------- 04/13/2021 ------------------
Name: Pinky
Owner name: David Smith
--------------- 07/10/2020 ------------------
Name: Charlie
Owner name: Joe Davis
--------------- 12/22/2018 ------------------
Name: Teddy
Owner name: Carl Johnson
--------------- 07/10/2020 ------------------
Name: Kenny
Owner name: Susan Jones
--------------- 04/13/2021 ------------------
Name: Max
Owner name: Bryan Miller
--------------- 07/10/2020 ------------------
Name: Buddy
Owner name: Kathy Brown
我試圖在 中進行某種排序printPets(),但它不起作用。所以我來這里尋求幫助。謝謝!
uj5u.com熱心網友回復:
itertools.groupby 是你要找的:
def printPets(self):
self.petsList.sort(key=lambda p: p.entryDate)
for group in groupby(self.petsList, key=lambda p: p.entryDate):
ls = list(group)
print("---------------", ls[0], '------------------')
for pet in list(ls[1]):
print("Name:", pet.name)
print("Owner name:", pet.ownerName)
uj5u.com熱心網友回復:
您可以sorted()與作為引數傳遞的 lambda 函式一起使用key。編輯:這段代碼應該產生你所期望的。即每個不同日期列印一個輸入日期。
def printPets(self):
for inputdate in sorted(list(set(i.entryDate for i in self.petsList))):
print("---------------",inputdate,'------------------')
for pet in list(filter(lambda x: x.entryDate == inputdate, self.petsList)):
print("Name:", pet.name)
print("Owner name:", pet.ownerName)
uj5u.com熱心網友回復:
此代碼if pet.entryDate == pet.entryDate在您的程式中無效,您可以進行以下更改:
entry_data = ""
if entry_data != pet.entryDate:
...
entry_data = pet.entryDate
使用函式排序sorted。
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):
entry_data = ""
for pet in sorted(self.petsList, key=lambda pet_shop: pet_shop.entryDate):
if entry_data != pet.entryDate: # Here I try to sort by date
print("---------------", pet.entryDate, '------------------')
print("Name:", pet.name)
print("Owner name:", pet.ownerName)
entry_data = pet.entryDate
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()
--------------- 04/13/2021 ------------------
Name: Pinky
Owner name: David Smith
Name: Max
Owner name: Bryan Miller
--------------- 07/10/2020 ------------------
Name: Charlie
Owner name: Joe Davis
Name: Kenny
Owner name: Susan Jones
Name: Buddy
Owner name: Kathy Brown
--------------- 12/22/2018 ------------------
Name: Teddy
Owner name: Carl Johnson
uj5u.com熱心網友回復:
您必須添加自定義比較函式才能按條件排序。考慮這個例子:
from datetime import datetime
class Petshop():
def __init__(self, entryDate, name, ownerName):
self.entryDate = entryDate
self.name = name
self.ownerName = ownerName
# create a utc time or custom integer fro fast compare
self.cmptime = int(datetime.strptime(entryDate, "%m/%d/%Y").strftime('%Y%m%d'))
pass
def __lt__(self, other):
return self.cmptime < other.cmptime
def __eq__(self, other):
return self.cmptime == other.cmptime
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):
self.petsList.sort()
for pet in (self.petsList):
if pet.entryDate == pet.entryDate: # Here I try to sort by date
print("---------------", pet.entryDate, '------------------')
print("Name:", pet.name)
print("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()
我從日期時間創建了一個簡單的整數,但您可以轉換為 UTC 時間,然后按順序覆寫__lt__和__gt__函式以使sort函式作業。
uj5u.com熱心網友回復:
您可以datetime在創建 petsList 時匯入和比較日期:
from datetime import datetime
def getDateFromStr(date):
date_list = []
for i in date.split('/'):
date_list.append(int(i))
# date_list = list(map(lambda x: int(x), date.split('/')))
return datetime(date_list[2], date_list[0], date_list[1]).date()
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)
# creating petsList sorted by date already
if len(self.petsList) == 0:
self.petsList.append(entry_pet)
else:
for i, pet in enumerate(self.petsList):
if getDateFromStr(pet.entryDate) < getDateFromStr(entryDate):
self.petsList.insert(i, entry_pet)
break
elif i == len(self.petsList) - 1:
self.petsList.append(entry_pet)
break
def printPets(self):
for pet in self.petsList:
if pet.entryDate == pet.entryDate:#Here I try to sort by date
print("---------------",pet.entryDate,'------------------')
print("Name:", pet.name)
print("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()
uj5u.com熱心網友回復:
您必須在類中添加魔法方法 __lt__ 才能進行排序。
class Petshop():
def __init__(self, entryDate, name, ownerName):
self.entryDate = entryDate
self.name = name
self.ownerName = ownerName
def __lt__(self, other):
return self.entryDate < other.entryDate
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):
for pet in sorted(self.petsList):
if pet.entryDate == pet.entryDate: # Here I try to sort by date
print("---------------", pet.entryDate, '------------------')
print("Name:", pet.name)
print("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()
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/341846.html
上一篇:用C#制作ASCII碼?
