2017-01-27 13 views
2

同じ質問で受け入れられた解決策に記載されている方法を使用してhereというデータをソートしようとしました。セットのリストの代わりにリストのリストを作成し、sortedメソッドを使用して2回ソートを試みました。しかし、それは動作しませんでした。上記のリンクと同じ出力が必要です。ここに私の出力です:ファイルデータの2つのフィールドに基づいたPythonソート

[['k3', '9.2603346875', '0.4639390435'], 
['K1', '4.1458078125', '0.5129700421'], 
['k2', '9.5360690625', '0.5481493305'], 
['k7', '9.8022878125', '0.562983695'], 
['k2', '6.319044375', '0.6469451082'], 
['k5', '7.2702040625', '0.6632701035'], 
['K1', '8.6394253125', '0.6690271589'], 
['K1', '8.025495625', '0.7561548244'], 
['k8', '5.44912125', '0.8532092538'], 
['k6', '7.73398625', '1.017231759'], 
['K1', '6.66228125', '1.0444456163'], 
['k4', '10.6868384375', '1.1287761798'], 
['k9', '7.5859665625', '1.276779643'], 
['K1', '6.48153375', '1.4176140292']] 

とここに私のコードです:

path = "C:\\Chandresh_WORK\\data\\" 
inpfile = 'demo1.txt' 
mylist=[] 
from operator import itemgetter 
with open(path+inpfile,'r') as fid: 
    for line in fid:  
     myset = list(line.split()) 
     mylist.append(myset) 

mylist 
s=sorted(mylist,key=itemgetter(0))  
sorted(s,key=itemgetter(2)) 

答えて

2

あなたは辞書式ソートを避けるために、数値型にあなたの文字列をキャストした後、第2の順序を反転する必要があります

s = sorted(mylist,key=lambda x: (x[0], -float(x[2]))) 
#         ^invert sort order 

[['K1', '6.48153375', '1.4176140292'], 
['K1', '6.66228125', '1.0444456163'], 
['K1', '8.025495625', '0.7561548244'], 
['K1', '8.6394253125', '0.6690271589'], 
['K1', '4.1458078125', '0.5129700421'], 
['k2', '6.319044375', '0.6469451082'], 
['k2', '9.5360690625', '0.5481493305'], 
['k3', '9.2603346875', '0.4639390435'], 
['k4', '10.6868384375', '1.1287761798'], 
['k5', '7.2702040625', '0.6632701035'], 
['k6', '7.73398625', '1.017231759'], 
['k7', '9.8022878125', '0.562983695'], 
['k8', '5.44912125', '0.8532092538'], 
['k9', '7.5859665625', '1.276779643']] 
+0

S:それは降順にするソート基準o、最初のステートメントが正しく理解されていれば、辞書型ソートが数値ソートよりも優先されますか? – chandresh

+0

(floatを使用して)数値型に変換しないと、項目は文字列のようにソートされます –

関連する問題