我是python新手,希望有人能帮我解决这个问题。我需要对一个字符串列表进行排序。
s = ['status', 'value', 'place', 'tag']
我需要以这样的方式排序,排序后的列表看起来像这样。
s_sorted = ['tag', 'place', 'status', 'value']
按顺序的话,特定的字符串 'tag'
需要总是在前面,其余的字符串要进行排序。我是想想出一个比较器,让我能够做到这一点。但是到目前为止,我还没能做到这一点。如果有人有解决这样的问题的经验,如果你能分享一些想法,我会很感激。
s = ['status', 'value', 'place', 'tag']
s_sorted = sorted(s, key=lambda x:(x!='tag', x))
列表中的 key
生成一个元组,第一个元素是布尔值,如果该元素不是 'tag'
. sort
按第一个元素排序,然后再按第二个元素排序。这样一来 tag
始终是第一位的,因为 False
前期 True
.
在其余要素的情况下 - 不等于 'tag'
- 排序通常是在第二个元组元素上进行,也就是在值本身上进行词法字符串排序。
从 sorted
文件:
key
指定一个参数的函数,用于从每个列表元素中提取比较键。key=str.lower
. 默认值是None
直接比较元素)。
你可以做这样的事情。
>>> s = ['status', 'value', 'place', 'tag']
>>> s.sort(key=lambda x: (x != 'tag', x))
>>> s
['tag', 'place', 'status', 'value']
这里要比较包含布尔值的图元组和项目本身,比如说 'tag'
布尔值将是 False
,所以它总是在前面。其余的值将有布尔值,如 True
和 True
> False
在Python中。
那么简单的方法呢?
first_item = 'tag'
s.pop(s.index(first_item))
s.sort()
s.insert(0, first_item)
假设 first_item
在目标列表中只出现一次,上述方法就可以了。