Steward_Xu

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

collection-系列

  cellection是作为字典、元组(列表与元组可互相转换)的扩充,在此需要导入cellection

一、计数器(counter)

  counter是对字典类型的补充,用户获取字典中元素出现的次数。它具备字典所有的功能以及自己自带的功能。

  

  
1 import collections
2 stra = collections.Counter('asdfasdfasdfdgghjertgfgsa')
3 print(stra)
4 输出的结果是:
5 Counter({'a': 4, 'd': 4, 'g': 4, 'f': 4, 's': 4, 'e': 1, 'h': 1, 'j': 1, 'r': 1, 't': 1})
6 后面的数字表示的是出现的次数。
Counte

   most_common,出现最多  

  
1 import collections
2 stra = collections.Counter('asdfasdfasdf[dggh]jertgfgsa')
3 print(stra)
4 ret = stra.most_common(4)
5 print(ret)
6 测试结果:
7 Counter({'a': 4, 'd': 4, 'g': 4, 'f': 4, 's': 4, 'e': 1, 'h': 1, 'j': 1, 'r': 1, 't': 1, '[': 1, ']': 1})
8 
9 [('a', 4), ('d', 4), ('g', 4), ('f', 4)] 输出了排名前四的
most_common

   elements元素:  

  
 1 import collections
 2 stra = collections.Counter('asdfasdfasdf[dggh]jertgfgsa')
 3 for items in stra.elements():
 4     print(items)
 5 执行结果:
 6 Counter({'a': 4, 'd': 4, 'g': 4, 'f': 4, 's': 4, 'e': 1, 'h': 1, 'j': 1, 'r': 1, 't': 1, '[': 1, ']': 1})
 7 a
 8 a
 9 a
10 a
11 e
12 d
13 d
14 d
15 d
16 g
17 g
18 g
19 g
20 f
21 f
22 f
23 f
24 h
25 j
26 s
27 s
28 s
29 s
30 r
31 t
32 [
33 ]
34 区别于:
35 import collections
36 stra = collections.Counter('asdfasdfasdf[dggh]jertgfgsa')
37 print (stra)
38 # for item in stra.elements():
39 #     print(item)
40 for item in stra.items():
41     print(item)
42 执行结果:
43 Counter({'a': 4, 'd': 4, 'g': 4, 'f': 4, 's': 4, 'e': 1, 'h': 1, 'j': 1, 'r': 1, 't': 1, '[': 1, ']': 1})
44 ('a', 4)
45 ('e', 1)
46 ('d', 4)
47 ('g', 4)
48 ('f', 4)
49 ('h', 1)
50 ('j', 1)
51 ('s', 4)
52 ('r', 1)
53 ('t', 1)
54 ('[', 1)
55 (']', 1)
View Code

  更新(增加删除)操作:  

  
 1 增加:
 2 import collections
 3 stra = collections.Counter(['aa','bb','cc'])
 4 print(stra)
 5 stra.update(['dd','aa','bb'])
 6 print(stra)
 7 结果:
 8 Counter({'aa': 1, 'cc': 1, 'bb': 1})
 9 Counter({'aa': 2, 'bb': 2, 'cc': 1, 'dd': 1}) 证明增加成功。
10 删除:
11 import collections
12 stra = collections.Counter(['aa','bb','cc'])
13 print(stra)
14 stra.update(['dd','aa','bb'])
15 print(stra)
16 stra.subtract(['dd','aa','bb'])
17 print(stra)
18 输出结果:
19 Counter({'aa': 1, 'cc': 1, 'bb': 1})
20 Counter({'aa': 2, 'bb': 2, 'cc': 1, 'dd': 1})
21 Counter({'aa': 1, 'cc': 1, 'bb': 1, 'dd': 0})证明已经删除了。
View Code

二、有序字典(orderedDict)

  有序字典是对字典的补充:  

  
 1 dic = collections.OrderedDict()
 2 dic['k1'] = 'v1'
 3 dic['k2'] = 'v2'
 4 dic['k3'] = 'v3'
 5 dic['k4'] = 'v4'
 6 dic['k5'] = 'v5'
 7 print(dic)
 8 结果输出:
 9 OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', 'v4'), ('k5', 'v5')])
10 值不会变而且是固定了,不像字典一样位置会是浮动变化的。
11 
12 popitem用法:
13 dic = collections.OrderedDict()
14 dic['k1'] = 'v1'
15 dic['k2'] = 'v2'
16 dic['k3'] = 'v3'
17 dic['k4'] = 'v4'
18 dic['k5'] = 'v5'
19 print(dic)
20 c = dic.popitem()
21 print(dic)
22 print(c)
23 输出结果:
24 OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', 'v4'), ('k5', 'v5')])
25 OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', 'v4')])
26 ('k5', 'v5')取出了‘k5’,'v5'是最后进的,所以遵循后进先出。
27 pop用法:
28 dic = collections.OrderedDict()
29 dic['k1'] = 'v1'
30 dic['k2'] = 'v2'
31 dic['k3'] = 'v3'
32 dic['k4'] = 'v4'
33 dic['k5'] = 'v5'
34 print(dic)
35 # c = dic.popitem()
36 c = dic.pop('k2')      ###指定取出k2
37 print(dic)
38 print(c)
39 输出结果:
40 OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', 'v4'), ('k5', 'v5')])
41 OrderedDict([('k1', 'v1'), ('k3', 'v3'), ('k4', 'v4'), ('k5', 'v5')])   pop表示是拿出删除据为己有。
42 v2       得到k2值
43 
44 新增update:
45 dic = collections.OrderedDict()
46 dic['k1'] = 'v1'
47 dic['k2'] = 'v2'
48 dic['k3'] = 'v3'
49 dic['k4'] = 'v4'
50 dic['k5'] = 'v5'
51 print(dic)
52 dic.update({'k1':'12','k5':'10','k10':'20'})
53 print(dic)
54 输出结果:
55 OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3'), ('k4', 'v4'), ('k5', 'v5')])
56 OrderedDict([('k1', '12'), ('k2', 'v2'), ('k3', 'v3'), ('k4', 'v4'), ('k5', '10'), ('k10', '20')])表示有k值更新k值。没有就新增。
View Code

三、默认字典(defaultdict)  

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

  
 1 import collections
 2 dic = collections.defaultdict(list)  #定义默认字典类型为list。
 3 dic['k1'].append('100')
 4 print(dic)
 5 输出:
 6 defaultdict(<type 'list'>, {'k1': ['100']})
 7 
 8 如果不采用默认字典:
 9 import collections
10 dic = {}
11 dic['k1'].append('100')
12 print(dic)
13 会报错:
14 Traceback (most recent call last):
15   File "C:/Users/daisy/PycharmProjects/s12/day3/collection-ϵ��.py", line 54, in <module>
16     dic['k1'].append('100')
17 KeyError: 'k1'
View Code

四、可命名元组(namedtuple)

  
 1 import collections
 2 #创建类。MyTupleClass 
 3 MyTupleClass = collections.namedtuple('MyTupleClass',['x','y','z'])
 4 obj = MyTupleClass('xx','yy','zz')
 5 print(obj.x)
 6 print(obj.y)
 7 print(obj.z)
 8 测试:
 9 xx
10 yy
11 zz
View Code

五、双向队列(deque)

  
 1 que = collections.deque()
 2 que.append('1')
 3 que.appendleft('10')
 4 que.append('20')
 5 que.extend(['xx','xxd','xxxd'])
 6 que.extendleft(['11','22','333'])
 7 print(que)
 8 print(que.rotate(2))
 9 print(que.count('1'))
10 print(que)
11 执行:
12 deque(['333', '22', '11', '10', '1', '20', 'xx', 'xxd', 'xxxd'])
13 None
14 1
15 deque(['xxd', 'xxxd', '333', '22', '11', '10', '1', '20', 'xx'])
View Code

六、单向队列(queue.queue)在queue  

  
 1 import Queue
 2 q = Queue.Queue()
 3 q.put("abc")
 4 q.put("def")
 5 print(q.qsize())
 6 print(q.get())
 7 运行结果:
 8 
 9 2
10 abc    先进先出:abc先进所以输出abc。
View Code

 

 

 

 

  

 

 

  

 

posted on 2017-04-23 19:01  Steward_Xu  阅读(474)  评论(0编辑  收藏  举报