如果需要統(tǒng)計(jì)一段文本中每個(gè)詞語(yǔ)出現(xiàn)次數(shù)哩都,需要怎么做呢魁兼?
這里就要用到字典類型了,在字典中構(gòu)成“元素:出現(xiàn)次數(shù)”的健值對(duì)漠嵌,非常適合“統(tǒng)計(jì)元素次數(shù)”這樣的問題咐汞。
下面就用一道例題,簡(jiǎn)單學(xué)習(xí)一下:
列表 ls 中存儲(chǔ)了我國(guó) 39 所 985 高校所對(duì)應(yīng)的學(xué)校類型献雅,請(qǐng)以這個(gè)列表為數(shù)據(jù)變量碉考,完善 Python 代碼,統(tǒng)計(jì)輸出各類型的數(shù)量挺身。
ls = ["綜合", "理工", "綜合", "綜合", "綜合", "綜合", "綜合", "綜合", "綜合", "綜合",\
? ? ? "師范", "理工", "綜合", "理工", "綜合", "綜合", "綜合", "綜合", "綜合","理工",\
? ? ? "理工", "理工", "理工", "師范", "綜合", "農(nóng)林", "理工", "綜合", "理工", "理工", \
? ? ? "理工", "綜合", "理工", "綜合", "綜合", "理工", "農(nóng)林", "民族", "軍事"]
接下來(lái)詳細(xì)說(shuō)一下思考的步驟:
1、構(gòu)建一個(gè)空字典
想要構(gòu)成“元素:出現(xiàn)次數(shù)”的健值對(duì)锌仅,那首先肯定就是要先生成一個(gè)空字典章钾。
d = { }
2、生成好空字典后热芹,就要往里面“裝”東西了贱傀。
如果要給上面那個(gè)空字典裝東西,直接用索引和賦值配合增加元素:
例子:
>>> t["一周有幾天"] = "7"
>>>print(t)
{‘一周有幾天’:’7’}
同樣方法伊脓,往d = { }添加元素府寒,用word代表字典里的“健”,就是那些Is里的那些詞:
d[word] = (心里活動(dòng):等报腔。株搔。于。纯蛾。等于啥呢纤房?)
這里要用到字典的一個(gè)操作方法:
d.get(key, default)? ? ? # 如果健存在,返回的值就是這個(gè)健翻诉,如果不存在炮姨,那就返回default捌刮。
那就寫出這個(gè)東西了:
d[word] = d.get(word, 0)? ? ?
# 給字典d里添加元素,“健”是word舒岸,值是d.get(word, 0) 绅作。
# d.get(word, 0) 的意思為:從字典d里找這個(gè)word,如果word存在蛾派,那就添加一個(gè)“word :word”健值對(duì)俄认,如果不存在,那就增加了一個(gè)“word:0”健值對(duì)碍脏。
有點(diǎn)繞梭依,慢慢理解下。
因?yàn)樽值鋎是空的呀典尾,那里面啥也沒有役拴,d.get(word, 0) 返回的肯定是 0 。
哎钾埂,哎河闰,出現(xiàn)數(shù)字了啊,注意褥紫,雖然是個(gè)“0”姜性。
另外一方面,給字典添加元素髓考,也不能手動(dòng)來(lái)吧部念,不現(xiàn)實(shí)。氨菇。
這個(gè)時(shí)候儡炼,當(dāng)然就得讓 for 循環(huán)出場(chǎng)了。
3查蓉、添加一個(gè)循環(huán)乌询。
for word in ls:
? ? ? d[word] = d.get(word, 0) + 1
讓‘word’在Is里循環(huán)取值,比如第一次 word 從 Is 取到一個(gè)詞豌研, “綜合”妹田,
那d[word] = d.get(word, 0)? 的結(jié)果,就是d[綜合] = 0鹃共。d一開始是空的鬼佣,現(xiàn)在有了健值對(duì),變成了{'綜合':'0'}及汉,
在給d.get(word, 0) 加個(gè) 1沮趣,就成了{(lán)'綜合':'1'}。
好啦坷随,現(xiàn)在我們知道了房铭,“綜合”這個(gè)詞出現(xiàn)了 1 次驻龟。
喜大普奔~~~~~
如果word在Is里接下來(lái)取到的詞不是“綜合”,那就是重復(fù)以上步驟缸匪;
如果取到的詞還是“綜合”翁狐,因?yàn)榻≈祵?duì)'綜合':'1'已經(jīng)在字典里了,所以d.get(word, 0) 的結(jié)果凌蔬,就不是0啦露懒,而是
d[綜合] = 1
再加個(gè)1,那就是d[綜合] = 2砂心,因?yàn)樽值涞慕〔辉试S重復(fù)懈词,值是可以重復(fù)的,所以這一步操作相當(dāng)于對(duì)'綜合':'1'進(jìn)行了就修改辩诞,變成了
‘綜合‘:’2‘?
這回明白了吧坎弯,通過(guò)循環(huán)操作,兩行代碼就生成了一個(gè)字典译暂,里面的健值對(duì)抠忘,就是詞語(yǔ)及其出現(xiàn)的次數(shù)。
到了這一步外永,其實(shí)工作已經(jīng)差不多了崎脉,以上全部代碼為:
d = {}
for word in ls:?
? ? ?d[word] = d.get(word, 0) + 1
用print(d) 來(lái)輸出結(jié)果:
{'綜合': 20, '理工': 13, '師范': 2, '農(nóng)林': 2, '民族': 1, '軍事': 1}
4、換種輸出形式
剛才顯示的還是不太一目了然伯顶,如果出現(xiàn)的結(jié)果是以列的形式囚灼,那會(huì)直觀一些。
怎么做祭衩?
還是用循環(huán)吧啦撮。
for k in d:?
? ? ? print("{}:{}".format(k, d[k]))
用 k 代表 字典里的 “健”,循環(huán)多次得到結(jié)果:
綜合:20
理工:13
師范:2
農(nóng)林:2
民族:1
軍事:1
format()的使用這里就不說(shuō)了汪厨,說(shuō)簡(jiǎn)單也簡(jiǎn)單,說(shuō)復(fù)雜也有點(diǎn)復(fù)雜愉择,format的格式控制那些玩意兒不好整劫乱。
好啦,今天就記這么多吧锥涕,這道例題的全部代碼如下:
d = {}
for word in ls:?
? ? ?d[word] = d.get(word, 0) + 1
for k in d:?
? ? ? print("{}:{}".format(k, d[k]))