Мой код следующий: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, 'а'), .........]. Это означает, что в целом текстовой файл, есть три а и так далее ...
Что мне нужно, чтобы вычислить для этого числа, вместо 3, мне нужно [3/числа всех знак]. Поэтому мне не нужно число, сколько знака, например, есть в тексте, но мне нужна вероятность знака a.
Так что, если в тексте (test.txt) будет "AAAB", мне нужен выход "список": [(0,75, 'а'), (0,25, 'б')]
Большое спасибо за помощь.
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' ценности? Подумайте об использовании [collection.defaultdict] (http://docs.python.org/library/collections.html#collections.defaultdict). – delnan
Это должно быть 'frequency.values ()' в строке в редактировании, а не 'frequency.keys()'. В конце концов, это значения этого dict, где хранится количество вхождений. (Клавиши хранят символы символов.) –