2013-03-11 68 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