def get_word_frequencies(filename):
freqs = {}
for line in open(filename):
for char in line.split():
if char in freqs:
freqs[char] += 1
else:
freqs[char] = 1
return freqs
我遇到了从文本文件中拆分字符并找到其频率的问题。我写了这段代码,但它只找到了单词。我想要A-Z字典中的字母。
答案 0 :(得分:2)
如果您想单独迭代字母,则无需split
。字符串可以直接迭代。
for char in line:
...虽然,这也会计算空白,如" &#34 ;.如果你只想要字母,你可以遍历单词,然后遍历单词中的每个字符。
for word in line.split():
for char in word:
顺便提一下,Python已经有一个Counter
类,所以你不一定需要手动构建一个频率字典。
>>> import collections
>>> print collections.Counter("hello how are you doing today?")
Counter({' ': 5, 'o': 5, 'a': 2, 'e': 2, 'd': 2, 'h': 2, 'l': 2, 'y': 2, 'g': 1, 'i': 1, 'n': 1, 'r': 1, 'u': 1, 't': 1, 'w': 1, '?': 1})
答案 1 :(得分:1)
您可以使用collections.Counter
和string.ascii_letters
来计算您的信件数量。 string.ascii_letters
的使用将允许您只计算字母,而不是标点符号等。
from collections import Counter
from string import ascii_letters
def get_word_frequencies(filename):
with open(filename) as f:
c = Counter(f.read())
return {k:v for k,v in c.items() if k in ascii_letters}
c = get_word_frequencies('derp.py')
print(c)
# {'o': 12, 'h': 1, 'C': 2, 't': 16, 'i': 18, 'y': 1, 'u': 5, 'f': 11, 'p': 6,
# 'v': 2, 'c': 10, 'm': 7, 'n': 13, 'k': 3, 'd': 5, 'a': 6, 'q': 2, 'w': 3,
# 's': 10, 'g': 3, 'r': 19, 'l': 6, 'e': 25}