计算长字符串中的字母(仅字母)(python 2.72)

时间:2011-12-02 01:44:02

标签: string count letters

我需要编写一个接收长字符串的函数,并放入字典中 每个字母,它是字符串中的出现频率。 我写了下一个函数,但问题是它不会忽略空格,数字等。 我被要求使用函数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

感谢您的帮助。

2 个答案:

答案 0 :(得分: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)

这将创建一个charactors及其计数字典,只有在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)txt[letter],您可以直接在python中访问每个字符,因为字符串是iterable,可以被视为类似于列表。

答案 1 :(得分: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}