python之路-字典扩展collections系列

collections是对字典的补充,提供了一些比较方便的方法,使用时需要先导入模块

导入模块:

import collections

1. 计数器Counter

统计参数中出现的次数,以字典的方式返回结果,参数可以是字符串,列表,元祖等。

简单使用:
import collections
collections.Counter

a = collections.Counter(‘aadfadfadfdfadfadfad‘)
print(a)

#输出结果为:
Counter({‘a‘: 7, ‘d‘: 7, ‘f‘: 6}) #统计一个字符串内每个字符出现的次数
b = collections.Counter([‘abadfadfad‘,‘abc‘,‘abc‘,‘def‘,1243,121,121,124,124])
print(b)
#输出结果为:

Counter({‘abc‘: 2, 121: 2, 124: 2, ‘abadfadfad‘: 1, 1243: 1, ‘def‘: 1})  #统计一个列表内每个元素出现的次数
方法:字典有的方法它都有,并且还有自己独特的方法
__missing__
     """ 对于不存在的元素,返回计数器为0 """
        ‘The count of elements not in the Counter is zero.‘
        # Needed so that self[missing_item] does not raise KeyError
        return 0示例:
import collections
b = collections.Counter([‘abadfadfad‘,‘abc‘,‘abc‘,‘def‘,1243,121,121,124,124])
print(b)
c = b.__missing__(‘abc‘)
print(c)

most_common   """ 按出现次数从大到小排序,列出低前n个,如果n超出总数范围,则列出所有元素 """
        ‘‘‘List the n most common elements and their counts from the most
        common to the least.  If n is None, then list all element counts.示例:
import collections
b = collections.Counter([‘abadfadfad‘,‘abc‘,‘abc‘,‘def‘,1243,121,121,124,124])
c = b.most_common(2) #打印出现次数最多的前两位
print(c)

#输出结果:
[(‘abc‘, 2), (121, 2)]

d = b.most_common(100)  #100超出了结果范围,所以打印全部
print(d)

#输出结果
[(‘abc‘, 2), (121, 2), (124, 2), (‘abadfadfad‘, 1), (1243, 1), (‘def‘, 1)]
 
  
elements
        """ 计数器中的所有元素,注:此处非所有元素集合,而是包含所有元素集合的迭代器 """
        ‘‘‘Iterator over elements repeating each as many times as its count.示例:
import collections
b = collections.Counter([‘abadfadfad‘,‘abc‘,‘abc‘,‘def‘,1243,121,121,124,124])
c = b.elements() #所有元素,有重复的会重复打印
d = list(c)
print(d)   

#输出结果:
[‘abc‘, ‘abc‘, ‘abadfadfad‘, 121, 121, 1243, 124, 124, ‘def‘]
update(self, iterable=None, **kwds):
        """ 更新计数器,其实就是增加;如果原来没有,则新建,如果有则加一 """
        ‘‘‘Like dict.update() but add counts instead of replacing them.示例:
import collections
b = collections.Counter([‘abadfadfad‘,‘abc‘,‘abc‘,‘def‘,1243,121,121,124,124])
#update之前
print(b)
b.update([‘abc‘])
b.update([1111111111111111])
#update之后
print(b)

#输出结果:
#update之前
Counter({‘abc‘: 2, 121: 2, 124: 2, ‘abadfadfad‘: 1, 1243: 1, ‘def‘: 1})

#update之后
Counter({‘abc‘: 3, 121: 2, 124: 2, ‘abadfadfad‘: 1, 1111111111111111L: 1, 1243: 1, ‘def‘: 1})

  
subtract(self, iterable=None, **kwds):
        """ 相减,原来的计数器中的每一个元素的数量减去后添加的元素的数量 """
        ‘‘‘Like dict.update() but subtracts counts instead of replacing them.
        Counts can be reduced below zero.  Both the inputs and outputs are
        allowed to contain zero and negative counts.

示例:如果相减的元素之前不存在,相减之后他的值为-1
import collections
b = collections.Counter([‘abadfadfad‘,‘abc‘,‘abc‘,‘def‘,1243,121,121,124,124])
print(b)
b.subtract([‘def‘])
b.subtract([‘aaa‘])
print(b)

#输出结果:
#相减之前
Counter({‘abc‘: 2, 121: 2, 124: 2, ‘abadfadfad‘: 1, 1243: 1, ‘def‘: 1})

#相减之后的结果:
Counter({‘abc‘: 2, 121: 2, 124: 2, ‘abadfadfad‘: 1, 1243: 1, ‘def‘: 0, ‘aaa‘: -1})
  
copy(self):
        """ 拷贝 """
        ‘Return a shallow copy.‘
示例:
import collections
b = collections.Counter([‘abadfadfad‘,‘abc‘,‘abc‘,‘def‘,1243,121,121,124,124])
print(b)
c = b.copy()
print(c)

#输出结果:
Counter({‘abc‘: 2, 121: 2, 124: 2, ‘abadfadfad‘: 1, 1243: 1, ‘def‘: 1})
Counter({‘abc‘: 2, 121: 2, 124: 2, ‘abadfadfad‘: 1, 1243: 1, ‘def‘: 1})

2. 有序字典 OrderedDict

我们知道字典默认是无序的,如果我们在想使用有序的字典,那么就可以用collections的OrderedDic函数,可以得到一个有序的字典。

创建一个有序字典:
import collections
dic = collections.OrderedDict({‘a‘:1,‘b‘:2})
print(dic)

#输出结果:
OrderedDict([(‘a‘, 1), (‘b‘, 2)])  #无论执行多少次,这个结果的顺序永远不变
OrderedDict有序字典的创建原理其实就是python内部将key创建为一个列表,然后循环这个列表,去取对应的value值因为列表是有序的,所以读到的value也是有序的。
OrderedDict可以使用字典的所有方法,除此之外它还有自己特有的方法:
popitem 拿走最后一个元素,并return该元素的key和value,后进先出 类似内存的栈,示例:
import collections
dic = collections.OrderedDict({‘a‘:1,‘b‘:2})
dic2 = dic.popitem()
#打印dic剩下的元素
print(dic)
#打印return得到的元素
print(dic2)

#输出结果:
#剩下的语速
OrderedDict([(‘a‘, 1)])

#return得到的元素内容
(‘b‘, 2)
pop  拿走后返回值,参数为key,返回的值为value。如果参数不存在,会报错。这个跟popitme的区别是popitem只能从最后一个元素删除,pop必须指定元素的key来删除,popitem返回的是key和value,pop返回的是vaule示例:
import collections
dic = collections.OrderedDict({‘a‘:1,‘b‘:2})
dic2 = dic.pop(‘a‘)
print(dic)
print(dic2)

#输出结果:
#pop后剩余的元素,此处返回的是key和value
OrderedDict([(‘b‘, 2)])

#pop返回的内容(返回的是一个vaule值)
1

setdefault 设置某一个k的默认值与默认字典的区别,默认字典是给字典内所有的key设置了一个默认值,而setdefault是给某一个key设置了默认值。
import collections
dic = collections.OrderedDict({‘a‘:1,‘b‘:2})

dic.setdefault(‘c‘,‘Default‘)
print(dic)

dic[‘c‘] = 3
print(dic)

#输出结果:
#给c设置了一个默认值Default
OrderedDict([(‘a‘, 1), (‘b‘, 2), (‘c‘, ‘Default‘)])

#赋值之后c的值变成了3,而不是Default
OrderedDict([(‘a‘, 1), (‘b‘, 2), (‘c‘, 3)])
update 如果k存在,修改为最新的值,如果不存在添加新的k和v

示例:
import collections
dic = collections.OrderedDict({‘a‘:1,‘b‘:2})
#b存在,执行了修改
dic.update({‘b‘:100})

#c不存在,执行了添加
dic.update({‘c‘:200})

print(dic)

#输出结果:
OrderedDict([(‘a‘, 1), (‘b‘, 100), (‘c‘, 200)])


  
时间: 2024-10-13 07:14:41

python之路-字典扩展collections系列的相关文章

python 数据结构 - collections系列

python中collections系列是对字典.元祖等数据结构的补充,不是python内置的,在使用之前,需要用 import collections 导入. 在collections系列中主要有以下内容: 1. Counter(seq) Counter()继承了dict类,其中seq为可迭代对象.接收seq,并以字典形式返回seq中每个元素(hashable)出现的次数. 1 import collections 2 3 s = 'abcdedcbae' 4 l = ['a','b','c'

Python之路【第十三篇续】jQuery案例-Form表单&插件及扩展

jQuery案例-Form表单 学完这个form表单的案例,如果有人说这个表单(功能)还不够NB(此文不包含样式,样式是CSS比较简单可以根据需求自己添加),那么找武Sir他帮你搞定. 一步一步来 注意事项(目录结构): 在写前端html代码的时候要注意(任何代码都一样),一定要规划好目录结构方便其他的人来看你的代码! 如果还有其他的html页面可以在加一个html存储的文件夹. 1.首先看下HTML主体 <!DOCTYPE html> <html lang="en"

Python之路【第十三篇】jQuery案例-Form表单&amp;插件及扩展

学完这个form表单的案例,如果有人说这个表单(功能)还不够NB(此文不包含样式,样式是CSS比较简单可以根据需求自己添加),那么找武Sir他帮你搞定. 一步一步来 注意事项(目录结构): 在写前端html代码的时候要注意(任何代码都一样),一定要规划好目录结构方便其他的人来看你的代码! 如果还有其他的html页面可以在加一个html存储的文件夹. 1.首先看下HTML主体 <!DOCTYPE html> <html lang="en"> <head>

python系列(四)python元组与字典

博主QQ:819594300 博客地址:http://zpf666.blog.51cto.com/ 有什么疑问的朋友可以联系博主,博主会帮你们解答,谢谢支持! 本博文目录: 一.元组 | 二.字典 | 三.字典的使用方法 前言:列表非常适合用于存储在程序运行期间可能变化的数据集.列表是可以修改的,这对处理网站的用户列表或游戏中的角色列表至关重要.然而,有时候你需要创建一些列不可修改的元素,元组就可以满足你这样的需求.Python将不能修改的值称为不可变的,而不可变的列表就被称为元组. 正文部分:

Python之路【第二篇】:Python基础(一)

Python之路[第二篇]:Python基础(一) 入门知识拾遗 一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. 1 2 3 if 1==1:     name = 'wupeiqi' print  name 下面的结论对吗? 外层变量,可以被内层变量使用 内层变量,无法被外层变量使用 二.三元运算 1 result = 值1 if 条件 else 值2 如果条件为真:result = 值1如果条件为假:result = 值2 三.进制 二进制,01 八进

python之路--模块--景丽洋

python之路--常用模块 阅读目录 认识模块 什么是模块 模块的导入和使用 常用模块一 collections模块 时间模块 random模块 os模块 sys模块 序列化模块 re模块 常用模块二 hashlib模块 configparse模块 logging模块 认识模块 返回顶部 什么是模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的代码(

Python之路【第十七篇】:Django【进阶篇 】

Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 import MySQLdb def GetList(sql): db = MySQLdb.connect(user='root', db='wupeiqidb', passwd='1234', host='localhost')

Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. Memc

Python之路【第十七篇】:Django之【进阶篇】

Python之路[第十七篇]:Django[进阶篇 ] Model 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 import MySQLdb def GetList(sql): db = MySQLdb.connect(user='root', db='wupeiqidb', passwd='1234', host='localhost')