2017-03-17 83 views
4

我有一個我想排序的元素列表,但我不想對它們進行排序,只有那些具有特定狀態的元素。舉例來說,假設我有peole的列表:Python:對列表中的特定元素進行排序

lst = [Mary, John, Anna, Peter, Laura, Lisa, Steve] 

他們中有些人有工作,比方說[Anna, Lisa, Steve]。我想按工作小時數對這些數據進行排序(升序),並將它們移動到列表的開頭,同時保持其餘順序完全相同。所以我們可以說,他們的工作小時數如下:

Anna.job.hours # 10 
Lisa.job.hours # 5 
Steve.job.hours # 8 

分排序後的名單將是這樣的:

[Lisa, Steve, Anna, Mary, John, Peter, Laura] 

當然,我可以創建兩個新的列表淘汰原有的一個排序的一個我想排序和把它們放在一起再次實現我追求的:

with_job = [person for person in lst if person.job] 
without_job = [person for person in lst if not person.job] 

with_job.sort(key=lambda p: p.job.hours) 

lst = with_job + without_job 

但我不知道是否有一個straigthforward,這樣做的Python的方式。

+1

我覺得你做的足夠Python的方式。你不需要第二個列表,但除此之外.. –

回答

6

爲什麼不:

lst.sort(key=lambda p: p.job.hours if p.job else 999) 
+0

簡單而高效。做得好。 –

+0

此解決方案是否爲無人工保持訂單? – Elmex80s

+0

等一下,現在我想起來了,這種解決方案不會讓這些人在沒有工作的情況下將名單放在開始位置,而不是按照預期的結果進行處理? – dabadaba

相關問題