python -- 尝试从文件中用字典计算单词长度

-2 投票
3 回答
2532 浏览
提问于 2025-04-17 02:55

在编程中,有时候我们会遇到一些问题,像是代码运行不正常或者出现错误。这时候,我们可以去一些技术论坛,比如StackOverflow,去寻找解决方案或者向其他人请教。

在这些论坛上,很多人会分享他们的经验和解决方法。比如,有人可能会说:“我遇到过类似的问题,我是这样解决的……”这样的话。通过这些交流,我们可以学到很多实用的技巧和知识。

总之,技术论坛是一个很好的地方,可以帮助我们解决编程中的各种问题,让我们在学习的过程中不再孤单。

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()

3 个回答

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

我觉得这样应该可以,不够时间现在试一下。希望对你有帮助!

0

你正在统计一行文字中每个单词出现的频率。

for line in lines:

     for word in length.keys():             
         print(wordct,length)

这里的“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")

我还建议

  1. 不要像那样把文件全部加载到内存中,文件对象和处理器现在是迭代器,已经很优化了,适合从文件中读取。

  2. 在主循环中去掉wordct等变量。

  3. 把“length”改个名字,可能叫“words”或者“dict_words”更合适。

呃,可能我理解错了——你是想统计文件中不同单词的数量吗?如果是这样的话,可以用len(length.keys()),或者是统计文件中每个单词的长度,假设是按长度排序的……

2

使用Counter。(<2.7版本)

撰写回答