2017-12-19 6 views
1

이 연습 문제를 해결하려고합니다. 코드가있는 사전을 가지고 있습니다 : 주문. Python. 두 개의 키와 dict을 기반으로 2D 목록 정렬

codes = {'JA':0,'FE':1,'MA':2,'AP':3,'MY':4,'JU':5,'JL':6,'AG':7,'SE':8,'OC':9,'NO':10,'DI':11} 

및 샘플 OD 데이터 :

sample = [['NO15',27],['JU17',45],['FE18',-4],['AP14',7],['JA18',97]] 

나는 두 가지 기준에 따라 샘플을 정렬 할. 첫째, 올해는 그것을 이잖아, 사전 의 달의 코드 및 secoond, 달의 순서를 동반 두 자리 숫자는 결과가 있어야합니다 :

sorted_sample = [['AP14',7],['NO15,27],['JU17',45],['JA18',97],['FE18',-4]] 

을 나는이 함께 노력하고있어

sorted(raw, key=lambda x: (x[2:4],codes.get(x[0][:2]))) 

sorted(sorted(raw, key = lambda x : x[2:4], reverse = True), key = lambda x : codes.get(x[0][:2]), reverse = False) 

하지만 올바른 결과를 얻지 못합니다.

답변

1

당신은 해 얻을 수있는 목록에 인덱스가 필요합니다. 당신의 모두

>>> sorted(sample, key=lambda x: (int(x[0][2:4]), codes.get(x[0][:2]))) 
[['AP14', 7], ['NO15', 27], ['JU17', 45], ['JA18', 97], ['FE18', -4]] 
1

당신이 시도 할 수 있습니다 :

import re 
codes = {'JA':0,'FE':1,'MA':2,'AP':3,'MY':4,'JU':5,'JL':6,'AG':7,'SE':8,'OC':9,'NO':10,'DI':11} 
sample = [['NO15',27],['JU17',45],['FE18',-4],['AP14',7],['JA18',97]] 
final_sample = sorted(sample, key=lambda x: (int(re.findall('\d+$', x[0])[0]), codes[re.findall('^[a-zA-Z]+', x[0])[0]], x[-1])) 

출력 :

[['AP14', 7], ['NO15', 27], ['JU17', 45], ['JA18', 97], ['FE18', -4]] 
0

감사합니다 : 그것은 숫자로 비교 있도록 또한, int로 변환. 코드에서 실수를 발견했습니다. [2 : 4] 다음에 샘플의 원소를 정수로 변환하려고했습니다. 첫 번째 부분 만 선택하는 것을 잊어 버립니다. int (x [2 : 4]) 대신 int (x [0] [2 : 4])를 사용합니다.