2011-06-14 58 views
3

我有一個看起來像這樣的結構:排序的字典與元組的值

{'key_info':(rank,raw_data1,raw_data2),'key_info2':....} 

基本上我需要回鍵的列表中的排序順序,即基於等級字段排序元組。

我的代碼看起來像現在這種權利(diff文件是結構的名稱以上):

def _sortRanked(self): 
    print(type(self.diffs)) 
    return sorted(self.diffs.keys(), key=lambda x: x[1], reverse=True) 

,自己目前返回此當我運行它:

return sorted(self.diffs.keys(), key=lambda x: x[1], reverse=True) 
IndexError: string index out of range 

我希望有人可以從中得到一點意義並幫助我。

編輯:

我改成了:

def _sortRanked(self): 
    return sorted(self.diffs.keys(), key=lambda x: self.diffs[x][0], reverse=True) 

我現在得到一個奇怪的命令,它在返回數據的順序是(摘錄,並在相同的字段順序同上):

R : 3.64486899669e-05 3605 11 
P : 3.11612504885e-05 1528 4 
C : 2.50018364323e-05 2316 7 
Q : -3.49014288804e-05 152 2 
T : -4.45535602789e-05 2623 11 
Z : -0.000101817241062 491 6 
q : -0.000301208352276 1812 19 

全輸出這裏:http://pastebin.com/e4eTYvgN

+0

訂單沒有什麼奇怪的。它似乎只是不按照你想要的方式排序。 (3.64486899669e-05> 3.11612504885e-05> 2.50018364323e-05> -3.49014288804e-05> -4.45535602789e-05> -0.000101817241062> -0。000301208352276) – JAB 2011-06-14 20:16:46

+0

看起來與我相反。負數小於正數。 – 2011-06-14 20:19:37

+0

哦,是的,這是對的,忘了'e-05'部分。是的,這是正確的,現在它只是一個輸出格式問題。感謝大家! – Till 2011-06-14 20:26:22

回答

6

keys()只給你鑰匙,沒有價值,所以你必須使用鍵從字典檢索值,如果要排序他們:

return sorted(self.diffs.keys(), key=lambda x: self.diffs[x], reverse=True) 

既然你選上rank,這是第一項在元組中,您不需要指定要排序的值元組中的哪個項目。但是,如果你想排序raw_data1

return sorted(self.diffs.keys(), key=lambda x: self.diffs[x][1], reverse=True) 
+0

我改變了它,我現在得到了一個奇怪的命令,就像我編輯的問題。 – Till 2011-06-14 20:13:43

2

你傳遞的關鍵作爲參數,呃,key

[k for (k, v) in sorted(D.iteritems(), key=lambda x: x[1], reverse=True)] 
+0

你忘了'reverse = True'部分。 – JAB 2011-06-14 20:05:24

+0

@JAB:好的電話。 – 2011-06-14 20:07:28

0

您試圖對字典的鍵排序,而不是數值。與self.diffs.items()更換你self.diffs.keys()調用,那麼它應該工作(但不要保持拉姆達,或使用operator.itemgetter(1)。元組排序開始的第一個元素,所以你不必擔心。)


只是注意到你只想要鑰匙。根據我的建議,你必須用zip()[0]來包裝排序(確保在調用zip()時加上*加前綴排序得到的元組列表)。

0

你很近。試試這個:

return sorted(self.diffs.keys(), key = lambda x: self.diffs[x][0], reverse = True) 

你排序鍵的列表,所以你必須採取的關鍵回字典,爲了使用它作爲一個比較值檢索元素1。

+0

這樣做的工作,但是它似乎在無意義的順序來排序... ',P:3.11612504885e-05 1528 4 C:2.50018364323e-05 2316 7 問:-3.49014288804e-05 152 2 T:-4.45535602789e-05 2623 11 Z:-0.000101817241062 491 6' – Till 2011-06-14 20:05:31