Python标准库collections中Counter详解 以及 使用中注意事项: Python2(2.7),Python3

通过名称就能明白Counter就是一个计数器,准确的说是对可哈希的对象进行数。

  学习重点:
 

1.  加减操作,结果过滤掉了所有小于等于0的键值对
2.  没有fromkeys()方法
3.  update()类似加法操作但有所差异, 和"+"区别,保留所有结果,且直接修改原对象
4.  c['s'] 如果没有对应的键不会报错,返回0值

Counter对象简要说明:

  1. Counter是dict的子类
  2. 可哈希对象进行计数(被计数对象作为键,计数结果为值) ---- 可哈希: 实现了__hash__(self, *args, **kwargs)方法对象
  3. 无序
  4. 值的类型: int, float,bool(计算时True变为1,False变为0
  5. 特色: 改对象可以直接进行加减操作:
    >>> c = Counter(a=10, b=6, c=0)
    >>> d = Counter(a=5, b=7, c=0)
    >>> c - d    # 返回新的Counter对象
    Counter({'a': 5})   # 过滤掉了对应差值小于等于0的键对
    >>> c + d
    Counter({'a': 15, 'b': 13})   # 过滤掉了对应差值小于等于0的键对
    
    
  6. 实现了除了fromkeys()之外所有方法,不同的方法update() --- 类似加法操作, 字典中是后面的值覆盖原先的值
    >>> c = Counter(a=10, b=6, c=0)
    >>> d = Counter(a=5, b=7, c=0)
    >>> c.update(d)   # 直接对修改c本身, 且保留所有的键值对
    >>> c
    Counter({'a': 15, 'b': 13, 'c': 0})  # c和d中对应键的值相加
    >>> c_dic = {'a': 10, 'b': 6, 'c': 0}
    >>> d_dic = {'a': 5, 'b': 7, 'c': 0}
    >>> c_dic.update(d_dic)  # d_dic中对应键的值覆盖了c_dic中 的值
    >>> c_dic
    {'a': 5, 'b': 7, 'c': 0}

基本操作:

  • 创建:
    >>> c = Counter()                           # 建空Counter
    >>> c = Counter('gallahad')                 # 从可迭代对象创建,如list,tuple,str,...
    >>> c = Counter({'red': 4, 'blue': 2})      # 从字典创建
    >>> c = Counter(cats=4, dogs=8)             # 通过键值对创建

     

  • 增加:
    • c[ 'a' ] = 10     # 通过类似字典操作
    • c.setdefault('a', 10)   # 注: 此操作在c中没有‘a’时在c中添加c且值为10,如果c中已包含‘a’则不做任何操作(原来c的值不变)
    • c.update() , 源码 : def update(*args, **kwds):所以update中可以加入list,str,dict,Counter
      • 注意: 该方法和dict的不同,dict中后面的值后替换原有的值,而该方法是值相加
        • 例: c = Counter(a=10); c.uptate(a=20), 结果a的值为30
        • 如: c.update("asdfasdasdasdas"), c.update(['aaa', 'bbb']), c.update(aaa=111, bbb=2)
        • >>> c = Counter()
          >>> c.update('abcde')
          >>> print(c)
          # 结果
          Counter({'a': 1, 'b': 1, 'c': 1, 'd': 1, 'e': 1})
  • 删:
    • c.clear()  # 清空
    • del c['a']  # 删除‘a’键值对
  • 改:
    • c['a'] = 10000
  • 查:
    • 查所有键(key):c.keys()
    • 查看所有值: c.values()
    • 查看某个键对应的值:1.    c['a']    # 注: 与字典不同的是如果c中没有对应的键时返回 0 , 2.    c.get('a')  # 同dict操作
    • 查结果中个数(值)最大 的几个: c.most_common([n]), 如果没传入数值或者传入None,返回所有键值对元组的有序列表
      >>> c = Counter(a=2,b=3,c=1)
      >>> c.most_common()
      [('b', 3), ('a', 2), ('c', 1)]

       

    • 获取所有元素列表:

      >>> c = Counter(a=2,b=3,c=1)
      >>> list(c.elements())
      ['a', 'a', 'b', 'b', 'b', 'c']

       

    • 另外还有字典的操作: c.items(), 等除了.fromkeys() Counter中没实现

  • 计算类操作:

    • 减法:

      >>> c = Counter(a=10, b=6, c=0)
      >>> d = Counter(a=5, b=7, c=0)
      >>> c - d    # 返回新的Counter对象
      Counter({'a': 5})   # 过滤掉了对应差值小于等于0的键对
      >>> c.subtract(d)   # 直接对修改c本身, 且保留所有的键值对
      >>> c
      Counter({'a': 5, 'c': 0, 'b': -1})  

       

    • 加法:

      >>> c = Counter(a=10, b=6, c=0)
      >>> d = Counter(a=5, b=7, c=0)
      >>> c + d    # 返回新的Counter对象
      Counter({'a': 15, 'b': 13})   # 过滤掉了对应值小于等于0的键对
      >>> c.update(d)   # 直接对修改c本身, 且保留所有的键值对
      >>> c
      Counter({'a': 15, 'b': 13, 'c': 0})  

       

到这里Counter中的方法及注意事项就讲完了,如果有疑问可以通过评论区交流,请大家批评指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值