2017-03-17 272 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

相关问题