首页 > 代码库 > 7.Python自学之路:collections系列

7.Python自学之路:collections系列

一丶计数器(counter)

    counter是对字典类型的补充,用于追踪值的出现次数,它集成了父类dict所有的功能。

技术分享
import collections
obj = collections.Counter(aaabbbcccddd)   #collections文件下的Counter类
print(obj)                                        #以字典的形式返回

ret = obj.most_common(4)
print(ret)                                         #前4名最多的

                                             
for k in obj.elements():                         #element原生的值
    print(k)                                      #aaabbbcccddd

for k,v in obj.items():               #obj的键为字符,值为出现的个数,组成的字典
    print(k,v)                                  #a 3 b 3 c 3 d 3
                                    #dict的循环方法有 items() keys() values()
                              #counter(dict) items() keys() values() elements()
obj = collections.Counter([11,22,33,22])
print(obj)
obj.update([eric,11,11])
print(obj)
Counter

 

二丶有序字典(orderedDict)

    OrderedDict是对字典类型的补充,在dict的基础上增加了有序的功能。    

技术分享
 1 #字典和列表结合成为有序字典
 2 # dic = {‘k1‘:‘v1‘,‘k2‘:‘v2‘}
 3 # li = list([‘k1‘,‘k2‘])
 4 #
 5 # for i in li :
 6 #     print(dic[i])
 7 import collections
 8 
 9 dic = collections.OrderedDict()
10 dic[k1] = v1
11 dic[k2] = v2
12 dic[k3] = v3
13 print(dic)  #OrderedDict([(‘k1‘, ‘v1‘), (‘k2‘, ‘v2‘), (‘k3‘, ‘v3‘)])
14 
15 dic.move_to_end(k1)   #将k1和它的值放在最后
16 print(dic)  #OrderedDict([(‘k2‘, ‘v2‘), (‘k3‘, ‘v3‘), (‘k1‘, ‘v1‘)])
17 
18 dic.popitem()    #从最后一个开始取出来,栈。
19 print(dic)       #OrderedDict([(‘k2‘, ‘v2‘), (‘k3‘, ‘v3‘)])
20 ret = dic.pop(k2) 
21 print(dic)  #OrderedDict([(‘k3‘, ‘v3‘)])
22 print(ret)  #v2
23 
24 dic.setdefault(k4,666)#不提供参数的时候等价于dic[‘k4‘] = none
25 print(dic)   #OrderedDict([(‘k3‘, ‘v3‘), (‘k4‘, 666)])
26 
27 dic.update({k1:v111,k10:v10})  #原先有的,就修改原先的值,没有的就加进去
28 print(dic)  #OrderedDict([(‘k3‘, ‘v3‘), (‘k4‘, 666), (‘k10‘, ‘v10‘), (‘k1‘, ‘v111‘)])
OrderedDict

 

三丶默认字典(defaultdict)

    DefaultDict是对字典的类型的补充,他默认给字典的值设置了一个类型。

技术分享
 1 import collections
 2 
 3 dic = collections.defaultdict(list) #其值就是list
 4 dic[k1].append(alex)
 5 print(dic)           #defaultdict(<class ‘list‘>, {‘k1‘: [‘alex‘]})
 6 
 7 
 8 #有如下值集合
 9 #[11,22,33,44,55,66,77,88,99,90]
10 #将所有 大于66的值保存到字典的第一个key中,
11 # 将小于66的值保存到第二个key的值中。
12 #即:{‘k1‘:大于66,‘k2‘:小于等于66}
13 #目的:{‘k1‘:[66,77,88,99,90],‘k2‘:[11,22,33,44,55]}
14 
15 #第一种方法:
16 dic = {}
17 all_list = [11,22,33,44,55,66,77,88,99,90]
18 for i in all_list:
19     if i > 66:
20         if k1 in dic.keys():
21             dic[k1].append(i)
22         else:
23             dic[k1] = [i, ]   
24     else:
25         if k2 in dic.keys():
26             dic[k2].append(i)
27         else:
28             dic[k2] = [i, ]   
29 
30 #对比一下,即使我们不用初始化进去一个列表
31              #改进如下
32 dic = collections.defaultdict(list)
33 all_list = [11,22,33,44,55,66,77,88,99,90]
34 for i in all_list:
35     if i > 66:
36         dic[k1].append(i)
37     else:
38         dic[k2].append(i)
DefaultDict

 

四丶可命名元组(namedtuple)

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

技术分享
 1 #t = (11, 22, 33, 44)
 2 #name adddress gender Email   类似于坐标
 3 #t.name 等价于 t[0]
 4 
 5 import collections
 6 
 7 #创建类,和defaultdict的作用类似
 8 MytupleClass = collections.namedtuple(MytupleClass,[x,y,z])
 9 print(help(MytupleClass))
10 obj = MytupleClass(11,22,33)
11 print(obj.x)
12 print(obj.y)
13 print(obj.z)
NamedTuple

 

五丶队列(deque & queue.Queue)

  双向队列:deque

技术分享
 1 import collections
 2 
 3 #双向队列
 4 d = collections.deque()
 5 d.append(1)
 6 d.append(10)
 7 d.appendleft(1)
 8 print(d)    #deque([‘1‘, ‘1‘, ‘10‘])
 9 d.extend([yy,uu,zz,xx])
10 print(d)    #deque([‘1‘, ‘1‘, ‘10‘, ‘yy‘, ‘uu‘, ‘zz‘, ‘xx‘])
11 d.rotate(5) #循环移动几位
12 print(d)    #deque([‘10‘, ‘yy‘, ‘uu‘, ‘zz‘, ‘xx‘, ‘1‘, ‘1‘])
deque

  单向队列:queue.Queue

技术分享
1 #单向队列
2 import queue
3 
4 q = queue.Queue()
5 q.put(123)
6 q.put(678)
7 print(q.qsize()) #2
8 print(q.get())   #123      只能按类里面的顺序拿
queue.Queue

 

    

7.Python自学之路:collections系列