Day049|Python300例之統計字符串各單詞頻次並排序輸出

今天是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!

向上向善,日進一步!

每天學習,努力成長!

定個小目標,開啓成長的旅程,遇見更好的自己。

這是我們和自己的約定,許諾自己不負韶華。

路雖遠,行則將至;事雖難,做則必成。

成長的最好時機,就是當下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章