Используйте функцию key
, которая будет определять порядок элементов:
>>> sorted(['apple','pear','xanadu','stop'], key=lambda val: (0, val) if val.startswith('x') else (1, val))
['xanadu', 'apple', 'pear', 'stop']
Лямбда означает следующее:
lambda val:\ # determine the ordering of the element `val`
(0, val)\ # make the algorithm compare tuples!
if val.startswith('x')\
else (1, val) # use default alphabetical ordering otherwise
Поскольку мы сейчас сравниваем кортежи (ноупорядочивая фактические значения), кортежи, чей первый элемент равен нулю, всегда будут сортироваться как больше, чем те, чей первый элемент равен 1.