我的代碼是下一個:Python中,概率
with open("test.txt") as f_in:
for line in f_in:
for char in line:
frequencies[char] += 1
list= [(count, char) for char, count in frequencies.iteritems()]
此代碼開放的test.txt,讀每一行和 「列表」 登入形式例如:[(3, 'A'), .........]。這意味着,在整個文本文件中,有三個等...
我需要的是來計算這個數字,而不是,我需要[所有跡象的3 /數字]。所以我不需要在文本中有多少符號例如a,但是我需要符號a的概率。
因此,如果在文本(test.txt的)會有「AAAB」,我需要 「列表」 的輸出:[(0.75, 'A'),(0.25, 'B')]
非常感謝您的幫助。
EDIT2
import collections
frequencies = collections.defaultdict(int)
with open("test.txt") as f_in:
for line in f_in:
for char in line:
frequencies[char] += 1
total = float(sum(frequencies.keys()))
verj= [(count/total, char) for char, count in frequencies.iteritems()]
這不工作,給我的錯誤:
total = float(sum(frequencies.keys()))
TypeError: unsupported operand type(s) for +: 'int' and 'str'
我假設你正在初始化'frequencies'到'0'值?考慮使用[collections.defaultdict](http://docs.python.org/library/collections.html#collections.defaultdict)。 – delnan 2010-12-12 14:52:19
這應該是編輯中的'frequencies.values()'行,而不是'frequencies.keys()'。畢竟,這是字典中存儲事件數量的值。 (鍵存儲字符符號。) – 2010-12-12 17:37:30