Python字典的高级用法统计计数
来源:AI入门学习
作者:小伍哥
在很多计算任务中,需要统计不同信息出现的次数,最常见的就是统计某段文字中每个词或者每个字出现的次数,也就是常见的词频统计,这个时候,字典就派上了很大的用场,我们看看通过字典怎么进行统计。
我们用鲁迅先生的经典语录作为例子(略有改动),为了简化,就不分词了,自己分字,统计字数即可。分词后形成了一个列表 text = list("床上有两个枕头,一个是我的,另一个也是我的") print(text) ["床", "上", "有", "两", "个", "枕", "头", ",", "一", "个", "是", "我", "的", ",", "另", "一", "个", "也", "是", "我", "的"]方法一:
通过字典,直接进行统计 word_dic = {} for word in text: if word in word_dic: word_dic[word] += 1 else: word_dic[word] = 1 print(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)+1 print(word_dic) {"床": 1, "上": 1, "有": 1, "两": 1, "个": 3, "枕": 1, "头": 1, ",": 2, "一": 2, "是": 2, "我": 2, "的": 2, "另": 1, "也": 1} 方法三:
还可以用collections 模块的defaultdict进行统计,显得更加简洁,更加专业。 from collections import defaultdict word_dic = defaultdict(int) for word in text: word_dic[word] += 1 print(word_dic) defaultdict(, {"床": 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,都不用设置,显得更加简洁,大家细细品味。