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