Python2.7排序列表

Python2.7排序列表,python,Python,我如何对这个列表进行排序,使所有不以“某物”开头的内容都位于列表顶部 a = ['something7375', 'something6375', 'something37573', 'something93746',\ 'Whatever22', 'whatever74', 'other837', 'other8394'] print sorted(a, key = lambda s: s.lower()) 结果是 ['other837', 'other8394', 'somet

我如何对这个列表进行排序,使所有不以“某物”开头的内容都位于列表顶部

a = ['something7375', 'something6375', 'something37573', 'something93746',\
     'Whatever22', 'whatever74', 'other837', 'other8394']

print sorted(a, key = lambda s: s.lower())
结果是

['other837', 'other8394', 'something37573', 'something6375',\
 'something7375', 'something93746', 'Whatever22', 'whatever74']
我希望:

['other837', 'other8394', 'Whatever22', 'whatever74',\
 'something37573', 'something6375', 'something7375', 'something93746']
这是假设您的所有列表项都以字母开头,但它应该可以工作

>>> a = ['something7375', 'something6375', 'something37573', 'something93746',     'Whatever22', 'whatever74', 'other837', 'other8394']
>>> print (sorted(a, key = lambda s: s.lower() if s.lower().startswith('something') else 'z'+s.lower()))
['other837', 'other8394', 'Whatever22', 'whatever74', 'something37573', 'something6375', 'something7375', 'something93746']

您可以利用元组/列表将首先按第一个元素排序,然后按第二个元素排序等这一事实。创建一个键函数,对于以“something”开头的任何内容,返回以1开头的元组,否则返回0

def somethingkey(k):
    k = k.lower()
    if k.startswith('something'):
        return (1, k)
    else:
        return (0, k)

a = ['something7375', 'something6375', 'something37573', 'something93746', 'Whatever22', 'whatever74', 'other837', 'other8394']

>>> print sorted(a, key=somethingkey)
['other837', 'other8394', 'Whatever22', 'whatever74', 'something37573', 'something6375', 'something7375', 'something93746']

你想让它按字符串长度排序吗?你可能可以使用一些稍微复杂的键函数来进行排序,但可能更直观的做法是将它分成两个列表,对每个列表进行排序,然后重新加入。他希望对它进行排序,这样,除了其他单词外,以某个开头的单词可以单独排序,您甚至可以将其缩减为一行
打印排序(a,key=lambda x:(x.startswith('something'),x.lower())
为什么?因为python rocks
not in
在这里不合适;一个项目可能包含
某物
,但不是以
某物
开头。我假设它只是在字符串中查找某物的任何实例,所以是的,你是正确的。编辑为使用
.startswith()
def somethingkey(k):
    k = k.lower()
    if k.startswith('something'):
        return (1, k)
    else:
        return (0, k)

a = ['something7375', 'something6375', 'something37573', 'something93746', 'Whatever22', 'whatever74', 'other837', 'other8394']

>>> print sorted(a, key=somethingkey)
['other837', 'other8394', 'Whatever22', 'whatever74', 'something37573', 'something6375', 'something7375', 'something93746']