Py学习  »  Python

【Python】Python字典的高级用法-统计计数

机器学习初学者 • 2 年前 • 206 次点击  

在很多计算任务中,需要统计不同信息出现的次数,最常见的就是统计某段文字中每个词或者每个字出现的次数,也就是常见的词频统计,这个时候,字典就派上了很大的用场,我们看看通过字典怎么进行统计。

 

我们用鲁迅先生的经典语录作为例子(略有改动),为了简化,就不分词了,自己分字,统计字数即可。分词后形成了一个列表

 

text = list('床上有两个枕头,一个是我的,另一个也是我的')print(text)['床', '上', '有', '两', '个', '枕', '头', ',', '一', '个', '是', '我', '的', ',', '另', '一', '个', '也', '是', '我', '的']

方法一:

通过字典,直接进行统计

word_dic = {}for word in text:    if word in word_dic:        word_dic[word] += 1    else:        word_dic[word]  = 1print(word_dic){'床': 1, '上': 1, '有': 1, '两': 1, '个': 3, '枕': 1, '头': 1, ',': 2, '一': 2, '是': 2, '我': 2, '的': 2, '另': 1, '也': 1}

 

方法二:

上面的语句加了条件判断,显得稍微有点复杂,我们可以简化如下

word_dic = {}for word in text:    word_dic[word] = word_dic.get(word,0)+1print(word_dic){'床': 1, '上': 1, '有': 1, '两': 1, '个': 3, '枕': 1, '头': 1, ',': 2, '一': 2, '是': 2, '我': 2, '的': 2, '另': 1, '也': 1}

 方法三:

还可以用collections 模块的defaultdict进行统计,显得更加简洁,更加专业。

 

from collections import defaultdictword_dic = defaultdict(int)for word in text:    word_dic[word] += 1print(word_dic)defaultdict(<class 'int'>, {'床': 1, '上': 1, '有': 1, '两': 1, '个': 3, '枕': 1, '头': 1, ',': 2, '一': 2, '是': 2, '我': 2, '的': 2, '另': 1, '也': 1})    

上面三种方法,看起来简单,实际上,要理解其中的奥妙是非常困难的,特别是对于初学者,大家可以仔细琢磨。
方法一之所以要加条件判断,是因为第一次出现的字,在字典中不存在,dict[key],当key不存在时会报错。
方法二通过get(word,0)方法,获取,如果不存在,则默认加入并置为0,后面加1就恰好是统计的次数了。需要充分理解get方法。
方法三通过defaultdict(int),默认不存在时是0,都不用设置,显得更加简洁,大家细细品味。
不明白的可以看我的另外两篇文章:
Python库collections,让你击败99%的Pythoner【万字长文详解】
Python字典详解-超级完整版

 

···  END  ···
往期 精彩回顾




本站qq群851320808,加入微信群请扫码:
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/119760
 
206 次点击