collections模块 : 有序字典 双端队列

collection模块

collection模块在内置的数据类型 比如int str list dict等基础上额外提供了几种数据类型

  1. namedtuple():   生成可以使用名字来访问元素内容的tuple子类
  2. deque :            双端队列 可以快速的从另外一侧追加和推出对象
  3. Counter            计数器 主要用来计数
  4. OrderedDict :    有序字典 (python3.6之后默认有序)
  5. defaultdict         带有默认值的字典

namedtuple()可命名元组

  tuple是一个不可变的集合 namedtuple是一个函数 她用来构建一个自定义的tuple对象 并且规定了tuple元素的个数 可通过属性而不是索引来引用tuple的某个元素 我们可以通过namedtuple很方便的自定义一个数据类型 它具有tuple的不变属性 又可以根据属性来引用

  可命名元组非常类似一个只有属性没有方法的类

  [x,y]是对象属性名

  piont是这个类的名字

  这个类最大的特点就是一旦实例化 不能修改属性的值

from collections import namedtuple
piont=namedtuple('piont',['x','y'])
p=piont(2,1)
print(p)  #piont(x=2, y=1)
print("x =",p.x)  #x = 2
print("Y =",p.y)  #Y = 1
print(isinstance(p,piont)) #True
print(isinstance(p,tuple))  #True

有序字典

  python3.6之前 字典是无序的 在做迭代时 无法确认key的顺序

  orderdDict是对字典类型的补充 它记住了字典元素添加的顺序 

from collections import OrderedDict
dd = OrderedDict([('a',1),('k1','v1')])
print(dd)
for k in dd:
    print(k,dd[k])
dd['k2'] = 'v2'
print(dd)

默认字典 defaultdict

defaultdict是对字典的类型的补充,他默认给字典的值设置了一个类型。
我们都知道,在使用Python原生的数据结构dict的时候,如果用 d[key] 这样的方式访问,
当指定的key不存在时,是会抛出KeyError异常的。但是,如果使用defaultdict
只要你传入一个默认的工厂方法,那么请求一个不存在的key时,
便会调用这个工厂方法使用其结果来作为这个key的默认值。
'd=defaultdict(list)'中的list必须是可以调用的  如果想传入不可调用的值 可以用lamda返回
from collections import defaultdict
d = defaultdict(list)  
print(d['a']) #[]
d['b'].append(123)  #可以直接append
print(d) #defaultdict(<class 'list'>, {'a': [], 'b': [123]})

  用lamda传入值:

func = lambda :'default'
d = defaultdict(func)
print(d['kkk'])
d['k'] = 'vvvvv'
print(d)

双端队列

  列表的缺点 双端队列可以弥补 (比如列表的insert非常慢 双端队列就很快)

from collections import deque
dq = deque()
dq.append(1) #在后面添加
dq.append(2)
dq.appendleft(3) #在左边添加
print(dq) #deque([3, 1, 2]) 取所有的值
print(dq.pop()) #2 删除最后面的值 并返回
print(dq.popleft()) #3 取左边的数值

  

队列

import queue
q = queue.Queue()  # 队列
q.put(1)
q.put(2)
q.put('aaa')
q.put([1,2,3])
q.put({'k':'v'})
print(q.get())
print(q.get())  #get一下 取一个值

猜你喜欢

转载自www.cnblogs.com/qq752059037/p/9593548.html
今日推荐