Python:对列表中的特定元素进行排序

时间:2017-03-17 09:21:34

标签: python python-2.7 sorting

我有一个我想要排序的元素列表,但我不想对所有这些元素进行排序,只有那些具有特定状态的元素。例如,让我们说我有一份人员名单:

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

但是我想知道是否存在一种严格的Pythonic方式。

1 个答案:

答案 0 :(得分:6)

为什么不:

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