2013-03-11 31 views
0

我想计算我的文件中每个字母的百分比而不是数字。我如何修改下面的代码?计算字符串而不是统计的百分比

stat_file = open(filename, 'w') 
one_letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
for letter in one_letter: 
    stat_file.writelines('%s : %d \n' % (letter, statistics[letter])) 

在此先感谢!

回答

1

首先,总字母数可以有两种含义:

1.只有词语的one_letter(仅适用于 'AZ' 你的问题)

one_letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
stat = {'A': 5, 
      'B':3, 
      'C':9, 
      'U': 5, 
      'D': 9, 
      'a': 99} 

total_count = sum(stat.get(letter, 0) for letter in one_letter) # should be 31 

2.所有词语在你的文件(包括 'A-Z', '0-9',...)

total_count = sum(stat.values()) # should be 130 


之后,您可以通过

for letter in one_letter: 
    stat_file.writelines("%s: %f%%\n" %(letter, \ 
     stat.get(letter, 0)/float(total_count)*100)) 

计算你个提醒的是,stat.get(letter, 0)只是情况下,如果不是所有的字母stat

如果您确定A-Zstat中,您可以用stat[letter]代替。

+0

非常感谢您的帮助。它的工作.. :) – Kisun 2013-03-12 09:06:44

+0

顺便说一句,我怎么能得到更多的统计,结合多个字母。例如,A + B的百分比? – Kisun 2013-03-12 09:26:44

+0

你的意思是(stat ['A'] + stat ['B'])/ float(total_count)* 100)'? – 2013-03-12 09:50:59

1

你需要找到所有的字母像这样的总和:

letter_count=0 
for letter in one_letter: 
    letter_count= letter_count + statistics[letter] 

然后让你需要改变你的代码,这样的比例:

stat_file.writelines('%s : %d %% \n' % (letter, (statistics[letter]/letter_count)*100) if statistics[letter]>0 else 0) 

注:我没有测试了代码(这台电脑上没有安装python),但它应该可以工作。 编辑:检查信件是否有0次发生。

+0

谢谢,虽然它不适用于我的数据。 – Kisun 2013-03-12 09:06:19

+0

你会得到什么样的错误? – aphex 2013-03-12 09:11:07

+0

生成的文件有A:100%,其余为0%。另外,我还想获得例如A + B或C + Z的百分比。 – Kisun 2013-03-12 09:24:46