在python中对字符串列表进行排序,使得特定字符串(如果存在)首先出现

San*_*u C 4 python sorting list

我是python的新手,希望有人可以帮我解决这个问题.我需要对字符串列表进行排序:

s = ['status', 'value', 'place', 'tag']
Run Code Online (Sandbox Code Playgroud)

我需要排序,排序列表如下所示:

s_sorted = ['tag', 'place', 'status', 'value']
Run Code Online (Sandbox Code Playgroud)

换句话说,特定的字符串'tag'必须始终在前面,其余的字符串将被排序.我试图想出一个可以让我这样做的比较器.但到目前为止我还没能做到这一点.如果有人有解决这样的问题的经验,如果你能分享一些想法,我将不胜感激.

mhl*_*ter 9

s = ['status', 'value', 'place', 'tag']
s_sorted = sorted(s, key=lambda x:(x!='tag', x))
Run Code Online (Sandbox Code Playgroud)

所述key产生的元组,具有如果元素不是第一元件布尔'tag'.sort按第一个元素排序,然后按第二个元素排序.这种方式tag总是首先因为False之前排序True.

在剩余元素的情况下 - 不等于'tag'- 排序通常在第二个元组元素上完成,这是对值本身的字典字符串排序.


从sorted 文档:

key指定一个参数的函数,用于从每个列表元素中提取比较键:key=str.lower.默认值为None(直接比较元素).


Ash*_*ary 5

你可以这样做:

>>> s = ['status', 'value', 'place', 'tag']
>>> s.sort(key=lambda x: (x != 'tag', x))
>>> s
['tag', 'place', 'status', 'value']
Run Code Online (Sandbox Code Playgroud)

这里将比较包含布尔值和项目本身的元组,因为'tag'布尔值将是False,因此它将始终位于前面.其余的值将在Python中具有布尔值as True和True> False.