Python拥有一些内置的数据类型,比如str,int, list, tuple, dict等, collections模块在这些内置数据类型的基础上,提供了几个额外的数据类型:
1. namedtuple 生成可以使用名字来访问元素内容的tuple子类
2. deque 双端队列,可以快速的从另外一侧追加和推出对象
3. Counter 计数器,主要用来计数
4. OrderedDict 有序字典
5. defaultdict 带有默认值的字典
下面看看每种类型的用法:
__author__ = 'MrChen'
# Python version 3.4.1
# Module: collections
#Counter 对象
from collections import Counter
c = Counter('abcdabcaba')
print(c) # Counter({'a': 4, 'b': 3, 'c': 2, 'd': 1})
print(c.most_common(2)) # [('a', 4), ('b', 3)]
#deque 对象
from collections import deque
d = deque('python')
d.append('3')
d.appendleft('nice')
print(d) # deque(['nice', 'p', 'y', 't', 'h', 'o', 'n', '3'])
d.pop()
d.popleft()
print(d) # deque(['p', 'y', 't', 'h', 'o', 'n'])
#defaultdict 对象
from collections import defaultdict
dic = defaultdict(list)
dic['red'].append(5)
dic['blue'].append(3)
dic['yellow'].append(4)
dic['red'].append(8)
print(dic.items()) # dict_items([('red', [5, 8]), ('yellow', [4]), ('blue', [3])])
#namedtuple 对象
from collections import namedtuple
websites = [
('baidu', 'http://www.baidu.com', '李彦宏'),
('sina', 'http://www.sina.com' , '王志东'),
('wangyi','http://www.163.com' , '丁磊')
]
Website = namedtuple('myWebsite',['name', 'url', 'ceo'])
for w in websites:
w = Website._make(w)
print(w)
'''输出:
myWebsite(name='baidu', url='http://www.baidu.com', ceo='李彦宏')
myWebsite(name='sina', url='http://www.sina.com', ceo='王志东')
myWebsite(name='wangyi', url='http://www.163.com', ceo='丁磊')
'''
#OrderedDict 对象
from collections import OrderedDict
items = (('d',3),('b',4),('a',1),('e',5),('c',2))
regular_dict = dict(items)
ordered_dict = OrderedDict(items)
print(regular_dict)
# {'a': 1, 'c': 2, 'b': 4, 'd': 3, 'e': 5}
# 可见一般的dict内部是乱序的
print(ordered_dict)
# OrderedDict([('d', 3), ('b', 4), ('a', 1), ('e', 5), ('c', 2)])
# OrderedDict是按照原来的顺序存储的
#如果需要进行排序
ordered_dict = OrderedDict(sorted(ordered_dict.items(), key=lambda t:t[0]))
print(ordered_dict) # OrderedDict([('a', 1), ('b', 4), ('c', 2), ('d', 3), ('e', 5)])