簡體   English   中英

如果第一個屬性相同,則按多個屬性對對象列表進行排序

[英]Sorting list of objects by more than one attribute if the first attribute is the same

我想按到達時間排序先到先得調度算法。 但是,如果多個到達時間是相同的值,我想按 PID 對它們進行排序。

所以,有輸入

PID、到達時間、突發時間
3,0,3
2,0,5
1,9,8
4,10,6

它應該產生PID,到達時間,突發時間
2,0,5
3,0,3
1,9,8
4,10,6

class 工藝:
def init (self, ID, ArrivalTime, BurstTime):
自我.ID = ID
self.ArrivalTime = 到達時間
self.BurstTime = BurstTime

這是我用來按到達時間排序的 lambda function。

sortedProcesses = sorted(進程,key=lambda x: x.ArrivalTime)

如何主要按到達時間排序,如果到達時間相同則按PID排序?

您可以使用元組作為排序鍵,這樣您就可以使您的 lambda function 返回一個具有較高優先級排序順序字段的元組首先出現。

 sortedProcesses = sorted(processes, key=lambda x: (x.x.ArrivalTime,x.ID))

如果您需要對其中一個屬性進行倒排,您可以利用 Python 的排序是穩定的這一事實。 為此,首先按優先級最低的字段排序,然后按優先級較高的字段排序結果。

例如,如果您希望項目以相反的到達時間但在相同的到達時間以升序的 ID 順序排列:

 sortedProcesses = sorted(processes, key=lambda x: x.ID)
 sortedProcesses = sorted(sortedProcesses, key=lambda x: x.ArrivalTime, reverse=True)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM