0

我需要编写一个接收长字符串的函数,并将每个字母放入字典中,这是它在字符串中的出现频率。我写了下一个函数,但问题是它没有忽略空格、数字等。我被要求使用这个函数symbol in string.ascii_lowercase,但我不知道该怎么做。这是我的代码:

def calc_freq(txt):
   dic={}
   for letter in range(len(txt)):
           if dic.has_key(txt[letter])==True:
                dic[txt[letter]] += 1
           else:
            dic[txt[letter]] = 1
   return dic

谢谢你的帮助。

4

2 回答 2

0

纯娱乐:

s = 'Type "help", "copyright", "credits" or "license" for more information.'
print dict(filter(lambda i: str.isalnum(i[0]), set(zip(a,map(a.count,a)))))

{'a':1,'c':3,'e':6,'d':1,'g':1,'f':2,'i':5,'h':2,' m':2,'l':2,'o':6,'n':3,'p':3,'s':2,'r':6,'t':3,'y' :2,'T':1}

于 2011-12-02T02:20:00.067 回答
0
import string

s = 'oasndoasndoansdakls'
count = []
dictionary = {}

for x in set(s):
     if x in string.ascii_lowercase:
          dictionary[x] = s.count(x)

print (dictionary)

这将创建一个包含字符及其计数的字典,并且仅当它们在string.ascii_lowercase列表中时才包含它们。


以下是如何在您的代码中使用它:

import string

def calc_freq(txt):
     dic={}
     for letter in txt:
          if letter in string.ascii_lowercase:
               if letter in dic:
                    dic[letter] += 1
               else:
                    dic[letter] = 1
     return dic

您只需要在将字母添加到字典或增加其计数之前添加一个 if 语句。

我还删除了letter in range(txt)and txt[letter],您可以直接在 python 中访问每个字符,因为字符串是 aniterable并且可以被视为类似于列表。

于 2011-12-02T01:49:31.733 回答