我想计算我的文件中每个字母的百分比而不是数字。我如何修改下面的代码?计算字符串而不是统计的百分比
stat_file = open(filename, 'w')
one_letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
for letter in one_letter:
stat_file.writelines('%s : %d \n' % (letter, statistics[letter]))
在此先感谢!
我想计算我的文件中每个字母的百分比而不是数字。我如何修改下面的代码?计算字符串而不是统计的百分比
stat_file = open(filename, 'w')
one_letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
for letter in one_letter:
stat_file.writelines('%s : %d \n' % (letter, statistics[letter]))
在此先感谢!
首先,总字母数可以有两种含义:
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-Z
在stat
中,您可以用stat[letter]
代替。
你需要找到所有的字母像这样的总和:
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次发生。
非常感谢您的帮助。它的工作.. :) – Kisun 2013-03-12 09:06:44
顺便说一句,我怎么能得到更多的统计,结合多个字母。例如,A + B的百分比? – Kisun 2013-03-12 09:26:44
你的意思是(stat ['A'] + stat ['B'])/ float(total_count)* 100)'? – 2013-03-12 09:50:59