2012-12-04 4 views
0

그래서이 목록을 가지고 listA라고 부를 것입니다. 예를 들어 각 목록에 [3] 개 항목을 가져 오려고합니다. ['5.01','5.88','2.10','9.45','17.58','2.76']이 정렬 된 순서로 표시됩니다. 따라서 최종 결과는 전체 목록을 산타의 맨 위에 다시 시작합니다. 그게 말이 되니? 당신이 정렬 된 순서로 전체 목록을 반환하려면목록을 파이썬에서 숫자순으로 정렬

[['John Doe', u'25.78', u'20.77', '5.01'], ['Jane Doe', u'21.08', u'15.20', '5.88'], ['James Bond', u'20.57', u'18.47', '2.10'], ['Michael Jordan', u'28.50', u'19.05', '9.45'], ['Santa', u'31.13', u'13.55', '17.58'], ['Easter Bunny', u'17.20', u'14.44', '2.76']]

+0

연산자 모듈에서 itemgetter()를 사용하십시오. 그것은 잘 모르지만, 당신이 원하는 것을 정확하게하도록 설계되었습니다. 람다보다 읽기 쉽고 구현이 매우 쉽습니다. –

+0

@MichaelDavidWatson, 아쉽게도 itemgetter는 문자열을 숫자순으로 정렬하는 데 도움이되지 않습니다. –

+0

참. 그러나 값이 이미 float/int 인 비슷한 솔루션을 찾고있는 Google에서이 페이지로 오는 모든 사람들을위한 itemgetter를 인식하는 것은 여전히 ​​좋습니다. –

답변

5

,이 작동하지 않을 수 있습니다. 이것은 당신의 입력리스트를 가지고 그것 위에 sorted을 실행합니다. True 세트 reverse 인수는 역방향 (내림차순) 순으로 목록을 정렬하고 key 인수는이 경우 각리스트의 세 번째 인수 float 인 정렬의 기준에있어서, 지정

In [5]: l = [['John Doe', u'25.78', u'20.77', '5.01'] # continues...  
In [6]: sorted(l, reverse=True, key=lambda x: float(x[3])) 
Out[6]: 
[['Santa', u'31.13', u'13.55', '17.58'], 
['Michael Jordan', u'28.50', u'19.05', '9.45'], 
['Jane Doe', u'21.08', u'15.20', '5.88'], 
['John Doe', u'25.78', u'20.77', '5.01'], 
['Easter Bunny', u'17.20', u'14.44', '2.76'], 
['James Bond', u'20.57', u'18.47', '2.10']] 

을 정렬 된 순서로만 값이 필요한 경우 다른 대답을 통해 가능한 값을 얻을 수 있습니다.

2

이 시도 :

>>> listA=[['John Doe', u'25.78', u'20.77', '5.01'], ['Jane Doe', u'21.08', u'15.20', '5.88'], ['James Bond', u'20.57', u'18.47', '2.10'], ['Michael Jordan', u'28.50', u'19.05', '9.45'], ['Santa', u'31.13', u'13.55', '17.58'], ['Easter Bunny', u'17.20', u'14.44', '2.76']] 

>>> [x[3] for x in sorted(listA, reverse = True, key = lambda i : float(i[3]))] 
['17.58', '9.45', '5.88', '5.01', '2.76', '2.10'] 
0
from operator import itemgetter 
lstA.sort(reverse = True, key = itemgetter(3)) 

그리고 당신은 갈 수 있습니다. 정렬에서 itemgetter()를 사용하면 정렬 할 색인이 여러 개있을 때 매우 유용합니다. 당신이 넥타이의 경우에 당신이 할 수있는 첫 번째 값에 알파벳순으로 정렬하고 싶다고하자.

그리고 Voilà!