2014-12-11 4 views
2

sort 또는 sorted을 목록에 적용하면 Python이 제대로 정렬되지 않습니다.
예를 들어 B1, B2, ..., B10, B11, ... 으로 주문하고 싶지만 파이썬 주문은 B1, B10, B11, B2, B20, B21, ... 입니다. 목록의 목록은 여기에 넣은 것보다 큽니다. 파이썬에 따르면, 102 전에 오기 때문에목록의 목록을 올바르게 주문하지 않는 이유는 무엇입니까?

def getKey(item): 
    return item[0] 

l = [['B3', '08:20', '08:50', ('LH233', 'Berlin', '08:20', '112', '203')], ['B10', '08:40', '08:55', ('AF76', 'Toulouse', '08:40', '57', '102')]] 

l.sort(key=getKey) OR sorted(l, key=getKey) 

Returns: 

[['B10', '08:40', '08:55', ('AF76', 'Toulouse', '08:40', '57', '102')], ['B3', '08:20', '08:50', ('LH233', 'Berlin', '08:20', '112', '203')]] 
+0

'B1'대신 'B01'을 사용할 수 있습니까? 만약 그렇다면'string.zfill (int)'는 다음과 같이 유용 할 것입니다 :' "A".zfill (2) == "0A"' – TehTris

답변

2

이, 당신의 예에서, 당신이 실제로 숫자 비교를 문자열 비교를 수행하고 있지 않기 때문에,이다. 한 가지 해결책은 그 숫자를 string-numbers으로 변환하는 것입니다.

0

첫 번째 숫자로 정렬되기 때문에. 목록에있는 목록.

B1-B10-B11-

한 제 1, 0 초, 1, 1 번째 ..

+0

정답이 아닙니다. – OptimusCrime

1

당신은 정수로 "B3"과 "B10"를 만들어야 3 및 10 예 :

def getKey(item):  
    return int(item[0][1:]) 
2

이것은 사용자의 키가 사전 식 순서로 정렬 된 문자열이기 때문입니다. 원하는 순서로 정렬하려면 정수 키가 필요합니다. 이것들을 얻는 한 가지 방법이 아래와 같습니다.

>>> l = [['B3', '08:20', '08:50', ('LH233', 'Berlin', '08:20', '112', '203')], ['B10', '08:40', '08:55', ('AF76', 'Toulouse', '08:40', '57', '102')]] 
>>> sorted(l, key=lambda x:int(x[0][1:])) 
[['B3', '08:20', '08:50', ('LH233', 'Berlin', '08:20', '112', '203')], ['B10', '08:40', '08:55', ('AF76', 'Toulouse', '08:40', '57', '102')]] 
관련 문제