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

时间:2014-04-15 17:35:02

标签: python list sorting

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

s = ['status', 'value', 'place', 'tag']

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

s_sorted = ['tag', 'place', 'status', 'value']

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

3 个答案:

答案 0 :(得分:9)

s = ['status', 'value', 'place', 'tag']
s_sorted = sorted(s, key=lambda x:(x!='tag', x))

key生成一个元组,如果元素不是'tag',则第一个元素布尔值为。 sort按第一个元素排序,然后按第二个元素排序。这种方式tag始终排在第一位,因为FalseTrue之前排序。

对于剩余元素 - 不等于'tag' - 通常在第二个元组元素上进行排序,这是对值本身的字典字符串排序。


来自sorted documentation

  

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

答案 1 :(得分:5)

您可以这样做:

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

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

答案 2 :(得分:0)

简单方法怎么样?

first_item = 'tag'
s.pop(s.index(first_item))
s.sort()
s.insert(0, first_item)

假设first_item仅在目标列表中出现一次,则上述操作将起作用。