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

时间:2011-09-23 12:48:48

标签: python

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 :(得分: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")

我也建议

  1. 不要将文件带入内存,文件对象和处理程序现在是迭代器,并且已经过优化以便从文件中读取。

  2. 在主线循环中删除wordct等。

  3. 将长度重命名为其他内容 - 也许是单词或dict_words

  4. 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