2011-12-02 73 views
0

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

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 

感谢您的任何帮助。

回答

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 

到如果statment添加你添加字母前的字典或增加其数量。

我也删除了letter in range(txt)txt[letter],你可以直接在python中访问每个字符,因为一个字符串是iterable,可以像列表一样处理。

+0

我如何做到这一点在我的代码? – Orr

+0

@Orr补充说,我让它更容易阅读,但如果你想要你的原始代码,只需要替换我改变的代码。 – Serdalis

+0

iv'e刚刚尝试过。它不起作用 – Orr

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}

相关问题