collection模块

一、计数器

Counter是对字典类型的补充,用于追踪值的出现次数,具备字典的所有功能加自己的功能。

1 import collections
2 obj = collections.Counter('aadsdfasddfg')  #计数
3 print(obj)
4 Counter({'d': 4, 'a': 3, 'f': 2, 's': 2, 'g': 1})  #输出结果

方法

1.most_common  #取前几位

obj = collections.Counter('aadsdfasddfg') 
ret = obj.most_common(4)  #拿前四位
print(ret)
[('d', 4), ('a', 3), ('s', 2), ('f', 2)]

2.sorted  #输出每个元素

a = sorted(obj)
print(a)
['a', 'd', 'f', 'g', 's']  #输出结果

3.join

a = ''.join(sorted(obj.elements()))
print(a)
aaaddddffgss

4.sum  #统计总数

a = sum(obj.values())
print(a)
12  #输出结果

5.

 1 a = obj['a']  #统计a的个数
 2 print(a)
 3 3  #输出结果
 4 
 5 del obj['d']  #删除‘d’
 6 b = obj['d']
 7 print(b)
 8 0  #输出结果
 9 
10 d = collections.Counter('asdfgjjk')  #新添加一个计数器
11 obj.update(d)  #新计数器更新到obj
12 c = obj['a']
13 print(c)
14 4  #输出结果
15 
16 obj.clear()  #清空
17 print(obj)
18 
19 e = collections.Counter('aaabbc')
20 e['b'] -= 2  #其中的‘b'减去2
21 f = e.most_common()
22 print(f)

6.update  #更新计数器

obj = collections.Counter(['11','22','33'])
obj.update(['44','11','11'])
print(obj)
Counter({'11': 3, '22': 1, '44': 1, '33': 1})

7.subtract  #相减

obj.subtract('hak')  
a = obj['a']
print(a)
2

二、有序字典(orderedDict)

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

 1 #有序字典
 2 
 3 import collections
 4 
 5 dic = collections.OrderedDict()
 6 #dic = dict()
 7 dic['k1'] = 'v1'
 8 dic['k2'] = 'v2'
 9 dic['k3'] = 'v3'
10 dic['k4'] = None
11 # dic.setdefault('k4')  #效果同上
12 print(dic)
13 OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', None)])
14 
15 dic.move_to_end('k1')  #把k1移到最后
16 print(dic)
17 OrderedDict([('k2', 'v2'), ('k3', 'v3'), ('k4', None), ('k1', 'v1')])
18 
19 dic.popitem()  #把第一个删除
20 print(dic)
21 OrderedDict([('k2', 'v2'), ('k3', 'v3'), ('k4', None)])
22 
23 dic.update({'k1':'v111','k10':'v10'})  #更新
24 print(dic)
25 OrderedDict([('k2', 'v2'), ('k3', 'v3'), ('k4', None), ('k1', 'v111'), ('k10', 'v10')])

 三、默认字典(defaultdict) 

import collections
from collections import defaultdict
dic = {'k1':[]}  #普通方法
dic['k1'].append('yoyo')
dic = collections.defaultdict(list)  #使用默认字典
dic['k1'].append('yoyo')
print(dic)

应用:

有如下值集合 [11,22,33,44,55,66,77,88,99,90...],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。

即: {'k1': 大于66 'k2': 小于66}
使用默认字典:
values = [11,22,33,44,55,66,77,88,99,90]
my_dict = defaultdict(list)

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

print(my_dict)

普通方法:

values = [11,22,33,44,55,66,77,88,99]
new_dic = {}
list1 = []
list2 = []

for i in values:
    if i >66:
        list1.append(i)
    else:
        list2.append(i)
new_dic['k1'] = list1
new_dic['k2'] = list2
print(new_dic)
for i in values:
    if i>66:
        if 'k1' in new_dic.keys():
            new_dic['k1'].append(i)
        else:
            new_dic['k1'] = [i,]
    else:
        if 'k2' in new_dic.keys():
            new_dic['k2'].append(i)
        else:
            new_dic['k2'] = [i,]
print(new_dic)

四、可命名元组

根据nametuple可以创建一个包含tuple所有功能以及其他功能的类型

import collections
#创建类,defaultdict
MytupleClass = collections.namedtuple('MytupleClass',['x','y','z'])
print(help(MytupleClass))
obj = MytupleClass(11,22,33)
print(obj.x)
print(obj.y)
print(obj.z)
11   #打印结果
22
33

五、双向队列

 1 #双向队列
 2 d = collections.deque()
 3 d.append('1')
 4 d.appendleft('10')
 5 d.appendleft('1')
 6 print(d)
 7 #deque(['1', '10', '1'])
 8 r = d.count('1')
 9 print(r)
10 #2
11 d.extend(['yy','uu','ii'])  #向右添加
12 print(d)
13 #deque(['1', '10', '1', 'yy', 'uu', 'ii'])
14 d.extendleft(['aa','bb','cc'])  #向左添加
15 print(d)
16 #deque(['cc', 'bb', 'aa', '1', '10', '1', 'yy', 'uu', 'ii'])
17 d.rotate(1)  #最后一个移到第一个
18 print(d)
19 #deque(['ii', 'cc', 'bb', 'aa', '1', '10', '1', 'yy', 'uu'])

单向队列

#单向队列
import queue
q = queue.Queue()
q.put('123')
q.put('678')
print(q.qsize())
print(q.get())  #先进先出
# 2
# 123

 

 

 

 
 
posted @ 2016-06-18 21:16  yoyoua  阅读(236)  评论(0编辑  收藏  举报