按条件条件对列表进行排序

Dem*_*ene 2 python sorting list

我知道如何使用sort()方法和适当的 lambda 规则在 Python 中简单地对列表进行排序。但是我不知道如何处理以下情况:

我有一个字符串列表,要么只包含字母,要么包含一个特定的关键字和一个数字。我想先对列表进行排序,以便将带有关键字的元素放在最后,然后按它们包含的数字对它们进行排序。

例如,我的列表可能是:mylist = ['abc','xyz','keyword 2','def','keyword 1']并且我希望它排序为['abc','def','xyz','keyword 1','keyword 2'].

我已经有类似的东西

mylist.sort(key=lambda x: x.split("keyword")[0],reverse=True)
Run Code Online (Sandbox Code Playgroud)

只产生

['xyz', 'def', 'abc', 'keyword 2', 'keyword 1']
Run Code Online (Sandbox Code Playgroud)

Sup*_*hva 7

一个班轮解决方案:

mylist.sort(key=lambda x: (len(x.split())>1, x if len(x.split())==1 else int(x.split()[-1]) ) )
Run Code Online (Sandbox Code Playgroud)

说明: 第一个条件len(x.split())>1确保多词串在单词串后面,因为它们可能有数字。因此,由于第一个条件,现在关系将仅在单字串与单字串或多字串与多字串之间存在。请注意,多字串和单字串不会有任何联系。因此,如果多字字符串我返回一个整数,否则返回字符串本身。

例子:

['xyz', 'keyword 1000', 'def', 'abc', 'keyword 2', 'keyword 1']

结果 :

>>> mylist=['xyz', 'keyword 1000', 'def', 'abc', 'keyword 2', 'keyword 1']
>>> mylist.sort(key=lambda x: (len(x.split())>1, x if len(x.split())==1 else int(x.split()[-1]) ) )
>>> mylist
['abc', 'def', 'xyz', 'keyword 1', 'keyword 2', 'keyword 1000']
Run Code Online (Sandbox Code Playgroud)