您的位置:首页 > 编程语言 > Python开发

python学习系列---collections模块

2017-08-29 10:16 471 查看
1.Counter Counter是对字典类型的补充,用于追踪值的出现次数。它具备字典的所有功能。在python的内部实现中,Counter类继承了dict类。

1.1 基本用法

>>> import collections

>>> obj = collections.Counter('I Dreamed A Dream')    

>>> obj

Counter({' ': 3, 'e': 3, 'a': 2, 'D': 2, 'm': 2, 'r': 2, 'I': 1, 'A': 1, 'd': 1})

>>> Counter统计了字符串中每个字符出现的次数

>>> print type(obj)

<class 'collections.Counter'> #Counter对象的类型

In [8]: obj.most_common(3) #这个方法在python3中才有

Out[8]: [(' ', 3), ('e', 3), ('a', 2)] #获取出现次数最多的前n个字符,n为参数。

In [12]: for k,v in obj.items():

    ...:     print k, v

    ...:     

a 2 #与dict拥有相同的获取items的方法,keys(),values()方法也相同。

  3

e 3

D 2

I  1

m 2

r 2

A 1

d 1

In [17]: obj.update(["But","The","Tigers","Come","At","Night"])

In [19]: print obj

Counter({'A': 1, 'Come': 1, 'I': 1, 'Dreamed': 1, 'Tigers': 1, 'But': 1, 'At': 1, 'Night': 1, 'The': 1, 'Dream': 1})
#可以更新Counter

In [20]: obj.subtract(["But","The","Tigers","Come","At","Night"])

In [21]: print obj

Counter({'A': 1, 'I': 1, 'Dreamed': 1, 'Dream': 1, 'Come': 0, 'Tigers': 0, 'But': 0, 'At': 0, 'Night': 0, 'The': 0})
#减少元素

In [24]: obj.subtract(["But","The","Tigers","Come","At","Night"])

In [25]: print obj

Counter({'A': 1, 'I': 1, 'Dreamed': 1, 'Dream': 1, 'Come': -2, 'Tigers': -2, 'But': -2, 'At': -2, 'Night': -2, 'The': -2})
#元素个数可以是负数。

2. OrderedDict

OrderedDict 是一个有序的字典类型,它同样具有字典的所有方法。

2.1 基本用法

In [26]: odic = collections.OrderedDict()

In [28]: odic['a']=1

In [29]: odic['b']=2

In [30]: odic['c']=3

In [31]: odic

Out[31]: OrderedDict([('a', 1), ('b', 2), ('c', 3)])
#顺序不变

In [32]: odic

Out[32]: OrderedDict([('a', 1), ('b', 2), ('c', 3)])
#顺序不变

In [33]: odic.setdefault('d')

In [34]: odic

Out[34]: OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', None)])
#设默认值为None

In [35]: odic.setdefault('d',4)

In [36]: odic

Out[36]: OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', None)])

In [37]: odic['d']=4

In [38]: odic

Out[38]: OrderedDict([('a', 1), ('b', 2), ('c', 3), ('d', 4)])

In [42]: odic.move_to_end('a')

Out[42]: OrderedDict([('b', 2), ('c', 3), ('d', 4),('a', 1)])
#将元素移动到最后

In [43]: odic.pop('c')

Out[43]: 3 #取出指定的元素

In [44]: odic

Out[44]: OrderedDict([('a', 1), ('b', 2), ('d', 4)])

In [45]: odic.update({'e':5,'f':6})

In [46]: odic

Out[46]: OrderedDict([('a', 1), ('b', 2), ('d', 4), ('e', 5), ('f', 6)])
#更新字典

3. defaultdict

defaultdict 为字典的每个元素指定一个默认的value类型。

3.1 基本用法

In [47]: ddic = collections.defaultdict(list)

In [48]: ddic['a'].append('No')

In [49]: ddic['a'].append('Song')

In [50]: ddic['a'].append('Unsung')

In [52]: ddic

Out[52]: defaultdict(list, {'a': ['No', 'Song', 'Unsung']})

In [53]: ddic['b'].append('No')

In [54]: ddic['b'].append('Wine')

In [55]: ddic['b'].append('Untasted')

In [57]: ddic

Out[57]: defaultdict(list, {'a': ['No', 'Song', 'Unsung'], 'b': ['No', 'Wine', 'Untasted'})

4. namedtuple

namedtuple 创建一个可以通过名字进行访问其中元素的元组,它包含tuple的所有功能。使用时需要首先创建一个namedtuple类。

4.1 基本用法

有一个常用的场景就是给坐标轴上的点赋予坐标值。

In [58]: MyNamedTu = collections.namedtuple('MyNamedTu',['x','y','z'])
#创建一个类

In [59]: obj = MyNamedTu(10,20,30)

In [60]: obj
Out[60]: MyNamedTu(x=10, y=20, z=30)

In [61]: obj.x

Out[61]: 10

In [62]: obj.y

Out[62]: 20

In [63]: obj.z

Out[63]: 30

在这里,我们使用namedtuple函数创建了一个MyNamedTu类,这个类有三个属性:x,y,z.  obj = MyNamedTu(10,20,30)这一句就相当于创建了一个对象,这个对象的三个属性x=10,y=20,z=30. 现在应该明白为什么同样是collections的模块,namedtuple不像collections模块里其他的功能一样直接使用一个类,而是要创建一个类了,一个原因就是我们要使用的类的属性是不确定的。

5. deque

deque 是一个线程安全的双向队列,它是python内置的队列。

5.1 基本用法

append(),appendleft(),clear(),copy(),count(),extend(),extendleft(),index(),insert(),remove(),revert(),rotate(),

In [66]: deq = collections.deque()

In [68]: deq.append(1)

In [69]: deq.appendleft(10)

In [70]: deq.appendleft(1)

In [72]: deq

Out[72]: deque([1, 10, 1])

In [73]: deq.count(1)

Out[73]: 2

In [74]: deq.extend([2,3,4])

In [75]: deq

Out[75]: deque([1, 10, 1, 2, 3, 4])

In [77]: deq.rotate()

In [78]: deq

Out[78]: deque([4, 1, 10, 1, 2, 3]) #从右边拿元素放到左边,默认为一个元素

In [79]: deq.rotate(2)

In [80]: deq

Out[80]: deque([2, 3, 4, 1, 10, 1]) #从右边拿指定个数的元素放到左边

5.Queue.Queue

Queue 是python中的一个单向队列,不是内置的,需要import.

用法略。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: