def myfunc(filename):
filename=open('hello.txt','r')
lines=filename.readlines()
filename.close()
lengths={}
for line in lines:
for punc in ".,;'!:&?":
line=line.replace(punc," ")
words=line.split()
for word in words:
length=len(word)
if length not in lengths:
lengths[length]=0
lengths[length]+=1
for length,counter in lengths.items():
print(length,counter)
filename.close()
答案 0 :(得分:2)
使用Counter。 (<2.7 version)
答案 1 :(得分:0)
您在一行中计算单词的频率。
for line in lines:
for word in length.keys():
print(wordct,length)
长度是所有不同单词的字面加上它们的频率,而不是它们的长度
length.get(word,0)+1
所以你可能想用
替换上面的内容for line in lines:
....
#keep this at this indentaiton - will have a v large dict but of all words
for word in sorted(length.keys(), key=lambda x:len(x)):
#word, freq, length
print(word, length[word], len(word), "\n")
我也建议
不要将文件带入内存,文件对象和处理程序现在是迭代器,并且已经过优化以便从文件中读取。
在主线循环中删除wordct等。
将长度重命名为其他内容 - 也许是单词或dict_words
Errr,也许我误解了 - 你是不是要计算文件中不同单词的数量,在这种情况下使用len(length.keys())或文件中每个单词的长度,大概按长度排序。 ......
答案 2 :(得分:0)
现在已经更明确地定义了这个问题,因此取代上述答案 目的是在整个文件中获得字长的频率。 我甚至不会逐行打扰,但使用类似的东西:
fo = open(file)
d_freq = {}
st = 0
while 1:
next_space_index = fo.find(" ", st+1)
word_len = next_space_index - st
d_freq.get(word_len,0) += 1
print d_freq
我认为这样可行,现在没有足够的时间来尝试。 HTH