Python collections模块

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)])





你可能感兴趣的:(python)