今天是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!
向上向善,日進一步!
每天學習,努力成長!
定個小目標,開啓成長的旅程,遇見更好的自己。
這是我們和自己的約定,許諾自己不負韶華。
路雖遠,行則將至;事雖難,做則必成。
成長的最好時機,就是當下。