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

标签 python list sorting

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

I have a list of strings, that either contain only letters or contain a specific keyword and a number. I want to sort the list first so as to put the elements with the keyword at the end, then sort those by the number they contain.

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

我已经有了类似的东西

mylist.sort(key=lambda x: x.split("keyword")[0],reverse=True)

只产生

['xyz', '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]) ) )

解释: 第一个条件 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']

关于python - 按条件条件对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43682992/

相关文章:

Python无法识别命令,但CMD可以

Python ssl 默认上下文抛出错误的文件描述符错误

string - 字符串列表中的笛卡尔积

c# - 将列表拆分为子列表,List.Contains() 找不到匹配项

python - 使用 python 删除列表中的重复条目

python - 无法在 Whatsapp api 中找到发送按钮

python - Json,抓取到网页 - python

java - 我如何告诉快速排序算法它应该终止?

python - 根据Python中给定的字符串对列表进行排序

python - 如何检查集合中是否已存在列表的 "unsorted version"?