最近舍友在學Python,有個作業是為了解決統計單詞出現次數並把結果輸出成字典這個問題,感覺挺有趣的,就寫了一段demo代碼,分享在博客上,希望對你有所幫助。
1.解決思路
(1)排除掉其他干擾項。 我們的目標是統計英文單詞出現次數,拿到的數據源是一段由英文單詞和各種符號的片段,所以干擾項就是各種符號。因為涉及的符號過多,只需要a-z和A-Z,不可能把所有的字符全部用replace方法替換掉,所以自然而然的想到正則匹配,在python里面的re模塊,用里面的sub方法來進行干擾項的過濾。
注意:要保留完整的單詞就不能把空格也去掉,把其它字符全替換成空格即可。
re.sub: 替換所有的匹配項,返回一個替換后的字符串,如果匹配失敗,返回原字符串
(2)將單詞分割成列表。 第一步中我們保留了空格,第二步我們就以空格為特點分割單詞,生成列表。
注意:由於可能存在連續兩個空格存在的情況,所以要用str.remove("")
去除多余的空項
(3)生成字典的鍵列表。 建一個新的列表作為字典的鍵列表,遍歷原來的單詞列表,如果單詞列表里面的單詞不在新列表里,就往新列表里添加該單詞。
(4)將單詞作為結果字典的鍵。 使用字典的fromkeys方法
來把第三步生成的key列表作為結果字典的鍵。
dict.fromkeys(seq[, value])
seq -- 字典鍵值列表。
value -- 可選參數, 設置鍵序列(seq)的值。
(5)遍歷key列表,利用count函數統計單詞出現次數
2.代碼實現
# 統計單詞出現次數並把結果輸出成字典
# 數據輸入
str = "Hello world, There are some test words. Hello world, There are some test words. Haha!"
# 過濾規則:過濾掉所有非字母的字符
import re
str = re.sub(r"[^a-zA-Z]+", " ",str)
print("過濾后的字符串:",str)
#拆分成列表
str = str.split(" ")
# 去除多余的空項
str.remove("")
print("拆分成列表:",str)
# 生成字典的key列表
dict_keys = []
for i in str:
if i not in dict_keys:
dict_keys.append(i)
print("key列表:",dict_keys)
# 輸出字典
# 定義空字典
words_dict = {}
# 往字典寫入key值
words_dict.fromkeys(dict_keys)
# 遍歷key列表,利用count函數統計單詞出現次數
for j in dict_keys:
words_dict[j] = str.count(j)
print("字典:",words_dict)