【发布时间】:2011-05-24 06:11:35
【问题描述】:
接下来是我的代码:
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,读取每一行并将“list”符号转换成例如:[(3, 'a'),........ .]。这意味着在整个文本文件中,有三个 a 等等......
我需要计算这个数字,而不是 3,我需要 [3 / 所有符号的数量]。所以我不需要文本中有多少个符号,例如 a 是多少,但我需要符号 a 的概率。
所以如果在text(test.txt)中会有"aaab",我需要输出"list":[(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: +: 'int' 和 'str' 的操作数类型不受支持
【问题讨论】:
-
我假设您正在将
frequencies初始化为0值?考虑使用collections.defaultdict。 -
那应该是
frequencies.values()在编辑的行上,而不是frequencies.keys()。毕竟,它是存储出现次数的那个字典的值。 (键存储字符符号。)
标签: python list char line probability