前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python字典在统计元素出现次数中的简单应用

python字典在统计元素出现次数中的简单应用

作者头像
大黄蜂ZF
修改2022-05-05 15:20:41
5.7K0
修改2022-05-05 15:20:41
举报

如果需要统计一段文本中每个词语出现次数,需要怎么做呢?

这里就要用到字典类型了,在字典中构成“元素:出现次数”的健值对,非常适合“统计元素次数”这样的问题。

下面就用一道例题,简单学习一下:

列表 ls 中存储了我国 39 所 985 高校所对应的学校类型,请以这个列表为数据变量,完善 Python 代码,统计输出各类型的数量。

代码语言:javascript
复制
 ls = ["综合", "理工", "综合", "综合", "综合", "综合", "综合", "综合", "综合", "综合",\
       "师范", "理工", "综合", "理工", "综合", "综合", "综合", "综合", "综合","理工",\
       "理工", "理工", "理工", "师范", "综合", "农林", "理工", "综合", "理工", "理工", \
       "理工", "综合", "理工", "综合", "综合", "理工", "农林", "民族", "军事"]
 

接下来详细说一下思考的步骤:

1、构建一个空字典

想要构成“元素:出现次数”的健值对,那首先肯定就是要先生成一个空字典。

代码语言:javascript
复制
d = { }

2、生成好空字典后,就要往里面“装”东西了。

如果要给上面那个空字典装东西,直接用索引和赋值配合增加元素:

例子:

代码语言:javascript
复制
 >>> t["一周有几天"] = "7"
 >>>print(t)
 {‘一周有几天’:’7’}
 

同样方法,往d = { }添加元素,用word代表字典里的“健”,就是那些Is里的那些词:

d[word] = (心里活动:等。。于。。等于啥呢?)

这里要用到字典的一个操作方法:

代码语言:javascript
复制
d.get(key, default)      # 如果健存在,返回的值就是这个健,如果不存在,那就返回default。

那就写出这个东西了:

代码语言:javascript
复制
d[word] = d.get(word, 0)     

# 给字典d里添加元素,“健”是word,值是d.get(word, 0) 。

# d.get(word, 0) 的意思为:从字典d里找这个word,如果word存在,那就添加一个“word :word”健值对,如果不存在,那就增加了一个“word:0”健值对。

有点绕,慢慢理解下。

因为字典d是空的呀,那里面啥也没有,d.get(word, 0) 返回的肯定是 0 。

哎,哎,出现数字了啊,注意,虽然是个“0”。

另外一方面,给字典添加元素,也不能手动来吧,不现实。。

这个时候,当然就得让 for 循环出场了。

3、添加一个循环。

代码语言:javascript
复制
 for word in ls:
       d[word] = d.get(word, 0) + 1
 

让‘word’在Is里循环取值,比如第一次 word 从 Is 取到一个词, “综合”,

那d[word] = d.get(word, 0) 的结果,就是d[综合] = 0。d一开始是空的,现在有了健值对,变成了{'综合':'0'}

在给d.get(word, 0) 加个 1,就成了{'综合':'1'}。

好啦,现在我们知道了,“综合”这个词出现了 1 次。

喜大普奔~~~~~

如果word在Is里接下来取到的词不是“综合”,那就是重复以上步骤;

如果取到的词还是“综合”,因为健值对'综合':'1'已经在字典里了,所以d.get(word, 0) 的结果,就不是0啦,而是

d[综合] = 1

再加个1,那就是d[综合] = 2,因为字典的健不允许重复,值是可以重复的,所以这一步操作相当于对'综合':'1'进行了就修改,变成了

‘综合‘:’2‘

这回明白了吧,通过循环操作,两行代码就生成了一个字典,里面的健值对,就是词语及其出现的次数。

到了这一步,其实工作已经差不多了,以上全部代码为:

代码语言:javascript
复制
 d = {}
 for word in ls: 
      d[word] = d.get(word, 0) + 1
 

用print(d) 来输出结果:

代码语言:javascript
复制
{'综合': 20, '理工': 13, '师范': 2, '农林': 2, '民族': 1, '军事': 1}

4、换种输出形式

刚才显示的还是不太一目了然,如果出现的结果是以列的形式,那会直观一些。

怎么做?

还是用循环吧。

代码语言:javascript
复制
 for k in d: 
       print("{}:{}".format(k, d[k]))
 

用 k 代表 字典里的 “健”,循环多次得到结果:

代码语言:javascript
复制
 综合:20
 理工:13
 师范:2
 农林:2
 民族:1
 军事:1
 

format()的使用这里就不说了,说简单也简单,说复杂也有点复杂,format的格式控制那些玩意儿不好整。

好啦,今天就记这么多吧,这道例题的全部代码如下:

代码语言:javascript
复制
 d = {}
 for word in ls: 
      d[word] = d.get(word, 0) + 1
 for k in d: 
       print("{}:{}".format(k, d[k]))

出自作者:老鲤 原链接:https://www.jianshu.com/p/011fcb526b19

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档