Python collections模块 用defaultdict / setdefault 函数 和counter类型 统计元素出现的次数

现在我们假如有一个列表,需要统计其中每种元素出现的次数,我们可以这样写

lis1 = ['a','b','c','a','c','a','a','b','c']
result = {}
for i in lis1:
    if i in result:
        result[i] += 1
    else:
        result[i] = 1
print(result)

out:
{'a': 4, 'b': 2, 'c': 3}

如果用collections模块提供的setdefault()函数,可以简化这一过程

import collections as col

result = {}
for i in lis1:
    result.setdefault(i, 0)
    result[i] += 1
print(result)

out:
{'a': 4, 'b': 2, 'c': 3}

其中的setdefault()函数可以接受一个key(即代码中的 i),如果字典中不存在这个key,就会创建这个键并设置值(也就是代码中i后面的0);如果存在这个键,则返回这个键原先对应的值。

我们再通过defaultdic()函数继续优化

result = col.defaultdict(int)
for i in lis1:
    result[i] += 1
print(result)

out:
defaultdict(<class 'int'>, {'a': 4, 'b': 2, 'c': 3})

这里defaultdict()相当于当键不存在时,返回默认值0;键存在则返回原来的键对应的值。
同时注意到我们传入了一个参数int,他代表返回0,而还有其他的参数如 str list set等等,有待研究,可以参考下面这篇文章
https://www.pythontab.com/html/2013/pythonjichu_1023/594.html

最后,如果使用collections中的counter类,只需要一行代码

cout = col.Counter(lis1)
print(cout)

out:
Counter({'a': 4, 'c': 3, 'b': 2})

Counter类是字典的一个子类,也是以键值对储存,但是它和字典的区别在于counter的值储存的是键出现的次数,因此counter主要是用来进行跟踪元素出现的次数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值