2011-04-11 3 views
4

내가 좋아하는 텍스트를 분리하는 2 대시를 문자열 목록이 있습니다python에서 문자열 비교 위치가 변경되는 문자열 목록을 어떻게 정렬합니까?

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

내가 문자열의 마지막 부분에서 Python으로 알파벳 순으로 목록을 정렬하고 싶습니다 - 2 대시 및에 . 파이썬에서이 작업을 수행 할 수있는 방법이 있습니까? 예 : 이것은 내가 정렬 후 목록처럼 보이길 바랄 것입니다.

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

(파이썬 2.6을 사용하고 있습니다.)

+0

을 :) – intuited

답변

8

당신은 key 속성 list.sort()로 사용할 수 있습니다

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

참고가 split() 호출이 허용

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 

인쇄 2 개 이상의 대시. 두 번째 이후의 모든 대시는 무시되고 세 번째 부분에 포함됩니다.

1

key 매개 변수에 정렬 할 키를 추출하는 기능을 제공하는 sort 또는 sorted을 사용하기 만하면됩니다. 이 경우 문자열을 - 문자로 분할하고 마지막 구성 요소를 선택하면됩니다.

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

1

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

sortedkey 매개 변수를 사용하여 당신은 당신의 *의 pythong에 의해 * 수축되지 않는

희망
>>> 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']