我是python的新手,希望有人可以帮我解决这个问题。我需要对字符串列表进行排序:
s = ['status', 'value', 'place', 'tag']
我需要排序,排序列表如下所示:
s_sorted = ['tag', 'place', 'status', 'value']
换句话说,特定字符串'tag'
必须始终在前面,其余字符串将被排序。我试图想出一个可以让我这样做的比较器。但到目前为止我还没能做到这一点。如果有人有解决这样的问题的经验,如果你能分享一些想法,我将不胜感激。
答案 0 :(得分:9)
s = ['status', 'value', 'place', 'tag']
s_sorted = sorted(s, key=lambda x:(x!='tag', x))
key
生成一个元组,如果元素不是'tag'
,则第一个元素布尔值为。 sort
按第一个元素排序,然后按第二个元素排序。这种方式tag
始终排在第一位,因为False
在True
之前排序。
对于剩余元素 - 不等于'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
,因此它将始终位于前面。其余值的布尔值为True
,True
> Python中的False
。
答案 2 :(得分:0)
简单方法怎么样?
first_item = 'tag'
s.pop(s.index(first_item))
s.sort()
s.insert(0, first_item)
假设first_item
仅在目标列表中出现一次,则上述操作将起作用。