Python練習題:詞頻統計

列表ls中存儲了我國不少所高校所對應的學校類型,請以這個列表爲數據變量,完善Python代碼,統計輸出各種型的數量python

ls = ["綜合", "理工", "師範", "農林", "軍事", "綜合", "綜合", "綜合", "理工", "理工", "軍事", "師範", "師範", "綜合"]


方法1 :利用collections的子類Counter從大到小排序ide

ls = ["綜合", "理工", "師範", "農林", "軍事", "綜合", "綜合", "綜合", "理工", "理工", "軍事", "師範", "師範", "綜合"]

from collections import defaultdict
from collections import Counter

ls_dict = defaultdict(lambda : 0)

for item in ls:
    key = item
    ls_dict[key] += 1

print(ls_dict)
# 結果:defaultdict(<function <lambda> at 0x00000000010BE048>, {'師範': 3, '農林': 1, '軍事': 2, '理工': 3, '綜合': 5})

print(Counter(ls_dict).most_common())
# 結果:[('綜合', 5), ('師範', 3), ('理工', 3), ('軍事', 2), ('農林', 1)]


方法2:函數

利用zip + sorted函數, sorted能夠對列表進行從小到大排序,對於字典,sorted默認只按照dict的key進行排序,因此要對dict進行調整變形;spa

利用zip函數把dict轉換成一個列表,列表中每一個元素都是一個元組,元組大小比較原理是,先比較第一個元素,相同的話在比較第二個;排序

利用sorted函數對轉換後的列表進行排序;ip

ls = ["綜合", "理工", "師範", "農林", "軍事", "綜合", "綜合", "綜合", "理工", "理工", "軍事", "師範", "師範", "綜合"]


d = {}
for word in ls:
    d[word] = d.get(word, 0) + 1
print(d)
# 結果: {'理工': 3, '綜合': 5, '師範': 3, '農林': 1, '軍事': 2}

z = zip(d.values(), d.keys())
print(sorted(z))
# 結果: [(1, '農林'), (2, '軍事'), (3, '師範'), (3, '理工'), (5, '綜合')]

方法3 : get

利用sorted + lambdait

sorted(d.items(), key=lambda x: x[1]) io

第一個參數是須要排序的列表,第二個參數是指定key(列表中的每一項的第幾個元素)來進行排序。function

首先d.items() 返回一個列表dict_items([('綜合', 5), ('師範', 3), ('農林', 1), ('理工', 3), ('軍事', 2)])

sorted會對這個列表進行遍歷,把list中的每個元素,也就是每一個元組當作x傳入匿名函數lambda x: x[1],函數返回值爲x[1]


d = {}

for word in ls:
    d[word] = d.get(word, 0) + 1
print(d)

d = sorted(d.items(), key=lambda x: x[1])

print(d)
# 結果: [('農林', 1), ('軍事', 2), ('師範', 3), ('理工', 3), ('綜合', 5)]
相關文章
相關標籤/搜索