2017-04-26 87 views
1

我有以下代碼:添加具有等級排序的附加列在Python

ID= # type is <class 'str'> 
dictionary={} #Dictionary 

with open('result.PRED', 'a') as fileOut: 
     for item in dictionary.keys(): 
      print(Question_ID,item,dictionary[item],sep='\t',file=fileOut) 

產生從我的文檔以下結果中的排名模型:

Q1_R1 Q1_R1_C1 0.0 
Q1_R1 Q1_R1_C10 0.0 
Q1_R1 Q1_R1_C2 0.0 
Q1_R1 Q1_R1_C3 0.196116135138 
Q1_R1 Q1_R1_C4 0.353553390593 
Q1_R1 Q1_R1_C5 0.205267008777 
Q1_R1 Q1_R1_C6 0.408248290464 
Q1_R1 Q1_R1_C7 0.0 
Q1_R1 Q1_R1_C8 0.0 
Q1_R1 Q1_R1_C9 0.0 
Q1_R6 Q1_R6_C1 0.301637573861 
Q1_R6 Q1_R6_C10 0.199260956948 
Q1_R6 Q1_R6_C2 0.147292928305 
Q1_R6 Q1_R6_C3 0.0860264946736 
Q1_R6 Q1_R6_C4 0.0819313340205 
Q1_R6 Q1_R6_C5 0.244377512197 
Q1_R6 Q1_R6_C6 0.161126919432 
Q1_R6 Q1_R6_C7 0.152303771019 
Q1_R6 Q1_R6_C8 0.0 
Q1_R6 Q1_R6_C9 0.0 

我需要創建一個額外的列這是基於列3中給出的分數的排名。另外,第二列未正確排序,因爲C10出現在C2之前。

例如,我試圖得到如下;

Q1_R1 Q1_R1_C1 0.0 4 
Q1_R1 Q1_R1_C2 0.0 5 
Q1_R1 Q1_R1_C3 0.196116135138 3 
Q1_R1 Q1_R1_C4 0.353553390593 1 
Q1_R1 Q1_R1_C5 0.205267008777 2 
..... ..... .... .... 
Q1_R1 Q1_R1_C10 0.0 6 

我一直在努力了很長一段時間用不同的方式,我無法找到一個方法來處理this.Thanks

回答

1

我用你的輸出字符串作爲輸入數據,使用split()方法獲取列表和第三項進行排序,然後按多個鍵再次對列表進行排序,這裏是代碼:

r="""Q1_R1 Q1_R1_C1 0.0 
Q1_R1 Q1_R1_C10 0.0 
... 
Q1_R6 Q1_R6_C6 0.161126919432 
Q1_R6 Q1_R6_C7 0.152303771019 
Q1_R6 Q1_R6_C8 0.0 
Q1_R6 Q1_R6_C9 0.0""" 

l=[i.split(' ') for i in r.split('\n')] 
tmp=sorted(l,key=lambda x:float(x[2]),reverse=True) 

for i in sorted([j+[i+1] for i,j in enumerate(tmp)],key=lambda x:(x[0],int(x[1].split('C')[-1]))): 
    print("\t".join(map(str,i))) 

結果:

Q1_R1 Q1_R1_C1 0.0 13 
Q1_R1 Q1_R1_C2 0.0 15 
Q1_R1 Q1_R1_C3 0.196116135138 7 
Q1_R1 Q1_R1_C4 0.353553390593 2 
Q1_R1 Q1_R1_C5 0.205267008777 5 
Q1_R1 Q1_R1_C6 0.408248290464 1 
Q1_R1 Q1_R1_C7 0.0 16 
Q1_R1 Q1_R1_C8 0.0 17 
Q1_R1 Q1_R1_C9 0.0 18 
Q1_R1 Q1_R1_C10 0.0 14 
Q1_R6 Q1_R6_C1 0.301637573861 3 
Q1_R6 Q1_R6_C2 0.147292928305 10 
Q1_R6 Q1_R6_C3 0.0860264946736 11 
Q1_R6 Q1_R6_C4 0.0819313340205 12 
Q1_R6 Q1_R6_C5 0.244377512197 4 
Q1_R6 Q1_R6_C6 0.161126919432 8 
Q1_R6 Q1_R6_C7 0.152303771019 9 
Q1_R6 Q1_R6_C8 0.0 19 
Q1_R6 Q1_R6_C9 0.0 20 
Q1_R6 Q1_R6_C10 0.199260956948 6