我想計算我的文件中每個字母的百分比而不是數字。我如何修改下面的代碼?計算字符串而不是統計的百分比
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