python初探-collections容器数据类型

collections容器数据类型是对基本数据类型的补充,简单介绍下计数器、有序字典、默认字典、可命名元祖、队列。

计数器(Counter)

Counter是对字典类型的补充,用于追踪值得出现次数

class Counter(dict)

import collections

obj = collections.Counter('asiwenaohweiatgwho')
print(obj)
    def most_common()
    # 返回一个列表
    def elements()
    # elements用来循环Counter元素

# 取到keys
for item in obj.elements():
    print(item)   

# 取到key和value
for k,v in obj.items():
    print(k,v)   

# 循环elements  -> 得到原始数据
# 循环obj  -> 得到处理完的数据
    def update() 
    # 更新Counter

obj.update(['eric',11,11])
更新计数器,如果原来没有,则新建,如果有则加1
    def subtract()    
    # 减少,可以为负

有序字典(OrderedDict)

对字典类型的补充,记住了字典元素添加的顺序
class OrderedDict(dict)

dic = collections.OrderedDict()
# 字典 dic = {'k1':'v1','k2':'v2'}
# 列表 li = ['k1','k2']
# for i in li:
#    print(dic[i])
#!/usr/bin/env python3

import collections

# dic = dict()
dic = collections.OrderedDict()
dic['k1'] = 'v1'
dic['k2'] = 'v2'
dic['k3'] = 'v3'

print(dic)
    def move_to_end()
    # 把一个已存在的元素移到队尾

dic.move_to_end('k1')
    def popitem()
    # 删除并返回,总是按照LIFO顺序,栈

# 按照后进先出的顺序,栈
dic.popitem()

    def pop()
    # 删除指定的k,并返回v

dic.pop('k2') 
# 有返回值v2
dic['k4'] = None
dic.setdefault('k4')    # 这两句效果等同

dic.update({'k1':'xx','k2':'yy'})

默认字典(defaultdict)

定义一个字典,让字典的值默认是个什么类型

dic = collections.defaultdict(list)
dic['k1'].append('alex')
print(dic)
from collections import defaultdict
values = [11,22,33,44,55,66,77,88,99]
my_dict = defaultdict(list)

for value in values:
    if value > 66:
        my_dict['k1'].append(value)
    else:
        my_dict['k2'].append(value)

可命名元祖(namedtuple)

默认元祖是通过索引去访问,可命名元祖可以通过命名参数去访问
创建可命名元祖,需要先创建类,通过类再去创建可命名元祖

import collections

#先去创建类
MytupleClass = collections.namedtuple('MytupleClass',['x','y','z'])    # 创建MytupleClass类
dir(MytupleClass)

obj = MytupleClass(11,22,33)
print(obj.x)
print(obj.y)
print(obj.z)

obj._asdict()    #返回一个有序字典OrderedDict

队列

python提供了两种队列:单向队列和双向队列

双向队列 deque

import collections
dq = collections.deque()    # 创建双向队列

dq.append()
dq.appendleft()
dq.clear()
dq.count()
dq.extend()
dq.extendleft()
dq.pop()    #从右边取
dq.popleft()    # 从左边取
dq.remove()    #从左往右删除
dq.reverse()
dq.rotate(n)    #轮训,从左往右轮询n个值,如果n为负数,则往左轮询

单向队列 先进先出FIFO

# epoll
# 单向队列,不在collections模块中,在queue中
import queue
q = queue.Queue(N)    #创建一个长队为N的单向队列,如果N省略,则无穷大
q.qsize()    #返回队列的长度
q.empty()    #如果队列为空,则返回True,否则返回False
q.full()    #如果队列已满,则返回True,否则返回Faluse
q.put('123')    #put一个元素到队列尾部
q.get()    #从队列头部移除并返回一个元素,FIFO
posted @ 2016-02-22 14:04  狗不理糯米饭  阅读(148)  评论(0编辑  收藏  举报