2017-12-19 23 views
1

私はこの課題を解決しようとしています。 私はコード:命令付きの辞書を持っています。Python。 2つのキーと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]] 

と私は2つの基準の下でサンプルをソートしたいです。まず、今年は、それのthats、辞書 月のコード、およびsecoond、月の順に同行の2桁は結果がでなければなりません:

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

はあなたが年を取得するリストのインデックスにする必要があります。それは数として比較するようにまた、intに変換:あなたの両方に

>>> 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

感謝を。私はこのコードで間違いを見つけました。私は[2:4]の後にサンプルの要素を整数にキャストしようとしていました。私は最初の部分だけを選ぶことを忘れています。 int(x [2:4])の代わりにint(x [0] [2:4])を使用します。

関連する問題