В Python, как бы отсортировать список строк, где меняется расположение сравнения строк? - PullRequest
4 голосов
/ 11 апреля 2011

У меня есть список строк, которые имеют 2 черты, разделяющие текст, например:

Wednesday-Morning-Go bowling
Sunday-Really late at night-Sleep
July-Noon-BBQ

Я бы хотел отсортировать список в алфавитном порядке в python по последней части строки - 2-йтире и дальше.Есть ли способ сделать это в Python?Например, именно так я бы хотел, чтобы список выглядел после сортировки.

July-Noon-BBQ
Wednesday-Morning-Go bowling
Sunday-Really late at night-Sleep

(я использую Python 2.6.)

Ответы [ 4 ]

8 голосов
/ 11 апреля 2011

Вы можете использовать атрибут key для list.sort():

a = ["Wednesday-Morning-Go bowling", "Sunday-Really late at night-Sleep",
     "July-Noon-BBQ"]
a.sort(key=lambda x: x.split("-", 2)[-1])
print a

отпечатков

['July-Noon-BBQ', 'Wednesday-Morning-Go bowling', 'Sunday-Really late at night-Sleep']

Обратите внимание, что вызов split() допускает более 2 тире.Каждый штрих после второго будет игнорироваться и включаться в третью часть.

1 голос
/ 11 апреля 2011

Используйте параметр key sorted:

>>> L=['Wednesday-Morning-Go bowling','Sunday-Really late at night-Sleep','July-Noon-BBQ']
>>> sorted(L,key=lambda x: x.split('-')[2])
['July-Noon-BBQ', 'Wednesday-Morning-Go bowling', 'Sunday-Really late at night-Sleep']
1 голос
/ 11 апреля 2011

Функция sort может принимать параметр key, который указывает функцию для вызова каждого элемента перед его сравнением.

def last_part( s ):
    return s.split('-')[-1]

my_strings = ["Wednesday-Morning-Go bowling",
              "Sunday-Really late at night-Sleep",
              "July-Noon-BBQ"]
my_strings.sort( key=last_part )
1 голос
/ 11 апреля 2011

Просто используйте sort или sorted, предоставляя в качестве необязательного параметра key функцию, которая извлечет ключ, по которому вы хотите отсортировать. В этом случае это делается путем разбиения строки на символ - и выбора последнего компонента.

sorted_list = sorted(mylist, key=lambda line: line.rsplit("-", 1)[-1])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...