2011-12-02 77 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}

相關問題