我的代码是下一个: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