2011-10-08 64 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