今天是Andy学Python的第49 天哦!
大家好,我是Andy。
昨天学习了计算字符串中单词出现的数量,今天继续研究,如何实现字符串中各单词出现频次并排序输出。
01.
项目需求
统计字符串中单词出现频次并排序输出。
02.
任务拆解
2.1 清洗数据,将字符串中的逗号、句号、问号替换为空格(本节只适用于字符串中最多只有逗号、句号、问号或空格的英文字符串)。
2.2 提取单词,使用split()将字符串分割为单词。
2.3 统计各单词出现次数,建立word空字典,采用字典get()方法,默认值为0,出现一次+1;也可用set()去重,再用count()计数。
2.4 排序输出,按字典中值的大小排序。
03.
代码实现
3.1版本1.0
def count_str_word(s): # 统计字符串单词频次,参数 s 代表字符串
a = s.replace(",", " ") # 将逗号替换为空格
a = a.replace(".", " ") # 将句号替换为空格
a = a.replace("?", " ") # 将问号替换为空格
word ={}
for i in a.split():
word[i] = word.get(i,0)+1 # 统计i出现次数
return word
count_str = input("Please input a string:\n")
print(count_str_word(count_str))
该版本实现了从字符串中清洗多余的标点,转换为单词并计算出现频次。
3.2字典按值排序
查阅资料,发现sorted()函数可实现对字典按键或值排序,需要运用lambda匿名函数。
方法如下:
d = {"a":1, "b":5, "c":2, "d":4}
a = sorted(d.items(), key = lambda x : x[0]) # 按键名排序
a1 = sorted(d.items(), key = lambda x : x[0],reverse = True)
b = sorted(d.items(), key = lambda x : x[1]) # 按值排序
b1 = sorted(d.items(),key = lambda x : x[1],reverse = True)
print(a)
print(a1)
print(b)
print(b1)
3.3 版本2.0
# 版本2.0
def count_str_word(s): # 统计字符串单词频次,参数 s 代表字符串
a = s.replace(",", " ") # 将逗号替换为空格
a = a.replace(".", " ") # 将句号替换为空格
a = a.replace("?", " ") # 将问号替换为空格
word ={}
for i in a.split():
word[i] = word.get(i,0)+1 # 统计i出现次数
result = sorted(word.items(),key = lambda x : x[1], reverse = True)
return result
count_str = input("Please input a string:\n")
print(count_str_word(count_str))
3.4 版本2.1
使用set()去重,用count()计算单词在列表中出现次数,并传入字典。
其他与版本2.0相同。
# 版本2.1
def count_str_word(s): # 统计字符串单词频次,参数 s 代表字符串
a = s.replace(",", " ") # 将逗号替换为空格
a = a.replace(".", " ") # 将句号替换为空格
a = a.replace("?", " ") # 将问号替换为空格
b = a.split()
w =set(b) # 去重
word = {}
for i in w:
word[i] = b.count(i) # 将单词在列表中出现次数传入字典
result = sorted(word.items(),key = lambda x : x[1], reverse = True)
return result
count_str = input("Please input a string:\n")
print(count_str_word(count_str))
51Day Day up!
向上向善,日进一步!
每天学习,努力成长!
定个小目标,开启成长的旅程,遇见更好的自己。
这是我们和自己的约定,许诺自己不负韶华。
路虽远,行则将至;事虽难,做则必成。
成长的最好时机,就是当下。
网友评论