2011-10-08 74 views
0

排序我有一個包含線如下txt文件(第一場是關鍵字,所述第二字段是關鍵字的頻率,而第三字段相關文本):線通過使用python

anorexia nervosa 1  在专利网看到一 
glaucoma 10  want to suck out my eyeballs and have them replaced with 
cancer 691  there is a drug that helps fight cancer called avastin 
gene therapy 1  writing a review paper on gene therapy 
hormone 35  glad my hormone injections end in a month 
depression 259  depression? just made depression cake: recipe here 

我想解析像這樣(通過這些關鍵字頻率的排序關鍵字)文件:

cancer 691 
depression 259 
hormone 35 
glaucoma 10 
anorexia nervosa 1 
gene therapy 1 

我檢查有關排序和秩序問題的其他問題,但我找不到任何很好的例子。 sort()似乎沒有工作。請讓我知道好的起點!

+0

發佈後請不要修改問題。您獲取數據的方式讓人分心。發佈另一個問題,如果你想優化這個或那樣的。 – eudoxos

回答

1

如果您的數組中有行,請使用key參數作爲排序函數; lambda將在空格/製表符處拆分行,取第二列,轉換爲浮點並將其用於比較。 reverse導致的順序來降(對不起,沒有測試過,但99%的工作模輸入錯誤):

data=file(yourFile).readlines() 
data.sort(key=lambda l: float(l.split()[1]),reverse=True) 
+0

我收到一個錯誤「ValueError:無法將字符串轉換爲浮點數:nervosa」您有想法嗎? – ooozooo

+0

啊,我看到,第一列中的單詞之間有空格。我建議你調整你的數據生成過程,只寫一個字。然後它會工作。作爲一個旁註,既然你自己生成了這個文本文件,爲什麼不用你現有的數據結構呢?另一件事,如果你很難理解python中的兩行代碼(沒有冒犯性,我是其他許多事物的初學者),請在電子表格中打開數據並在那裏排序。 – eudoxos

+0

感謝您的幫助和評論!其實我的數據超過10,000行。所以,我不能使用電子表格。 – ooozooo

1

solution by eudoxos將工作,你必須用製表符(\ t)的 即分裂,

data=file(yourFile).readlines() 
data.sort(key=lambda l: float(l.split('\t')[1]),reverse=True) 

在這裏,通過您的輸入文本的外觀,我假設,不同的字段由製表符分隔。

但是,用逗號分隔將是一個更好的解決方案,因爲可能會混合製表符和空格。

+0

是的,你是對的。所以我已經修復了它並嘗試了代碼。謝謝! – ooozooo