hamlettxt = gettext()
words = hemlettxt.split()
counts={}
for word in words:
counts[word]=counts.get(word,0)+1
這是一段遍歷hamlet.txt檔案的一段**.s.split()函式返回的是列表list
我有一些困惑:
1.最後一句**是如何執行的?
counts[word]=counts.get(word,0)+1
python是如何執行它的?從左到右?還是從右到左?
print(lst)==lst.reverse()
利用這段函式的執行,發現python會先列印,再翻轉,所以說是從左往右的。
所以**是先執行等號左邊的**, 先將word這個鍵建立,此時還未執行"="操作.
然後再執行等號右邊的**.
[cout.get(key,default=none)這個函式是通過key獲取value,如果找不到key,則返回none.]
由於count.get(word,0)是第一次在字典中查詢key,所以會返回0,這個時候需要加1.同時也是為了以後的累加,如同sum =sum+1一樣.
[因為word是從txt文字中獲得的,所以必定出現一次]
2,知道了如何新增鍵與值,如何累加呢?
字典比較神奇的一點就是,它的新增和修改是同樣的形式.
>>> count
>>> count['nihao']=3
>>> count
>>> count['aini']=2
>>> count
從以上**可以發現,如何鍵在字典裡面,則"count[鍵]=值"是修改;若不在字典裡面,則是新增.
所以,對txt引入字典的概念,也正是利用了這一特性,用了一行**就搞定了[word]與[次數]的問題.
items = list(counts.items())
items.sort(key = lambda x:x[1],reverse = true)
counts.items()函式以列表的形式返回可遍歷的(鍵, 值) 元組陣列
>>> count=
>>> count.items()
dict_items([('nihao', 2), ('buhao', 3)])
>>> list(count)
['nihao', 'buhao']
>>> list(count.keys())
['nihao', 'buhao']
>>> list(count.values())
[2, 3]
count.items()是轉換成二維的元組形式
list(count)與list(count.keys())有同樣的效果,將鍵轉成list
list(count.values())將值轉成list
items.sort(key = lambda x:x[1],reverse = true)
items.sort()函式是對元素以從小到大的方式進行排序,所以這裡使用了reverse引數,使得元素從大到小排序.
如果處理的資料不是一維的,而是二維的甚至多維的,就要利用sorted()函式內的key引數,它可傳入乙個自定義函式.
這裡items中包含的是一組二維的元組(鍵,值),這裡使用了lambda函式.
>>> y = lambda x,y:x+y
>>> y(1,2)
3
lambda函式是乙個匿名函式,從上面例子可知,":"冒號後面的是表示式.輸入的引數以逗號隔開.
key引數傳入了乙個lambda函式表示式,其x就代表列表裡的每乙個元素,然後分別利用索引返回元素內的第x個元素,這就代表了sort()函式利用哪乙個元素進行排列。
所以就是按照元組中的第二個元素進行排序.
文字詞頻統計是字典嗎 Python 文字詞頻統計
很多時候需要對一篇文章統計其中多次出現詞語,進而分析文章的內容,這就需要用到詞頻統計。詞頻統計就是累加問題,即對文件中每個詞設定乙個計數器,詞語每出現一次,相關計數器就加一次。def gettext text open ceshi.txt r read text text.lower for ch ...
Python例項 文字詞頻統計
最近在mooc跟著北京理工大學的嵩天老師學習python 受益匪淺,老師所講的通俗易懂,推薦給大家。在此記點筆記和注釋,備忘。今天所記得是文字詞頻統計 hamlet文字詞頻統計。直接上源 calhamletv1.py def gettext txt open e hamlet.txt r read ...
Python 文字詞頻統計中英文
統計一段英文中 出現次數最多的幾個單詞 def get text text open eng.txt r read text text.lower 所有單詞都替換成小寫 for ch in 去噪,歸一化處理,把所有特殊符號替換為空格 text text.replace ch,return text ...