Counter:字典的子类,提供了可哈希对象的计数功能
defaultdict:字典的子类,提供了一个工厂函数,为字典查询提供了默认值
OrderedDict:字典的子类,保留了他们被添加的顺序
namedtuple:创建命名元组子类的工厂函数
deque:类似列表容器,实现了在两端快速添加(append)和弹出(pop)
ChainMap:类似字典的容器类,将多个映射集合到一个视图里面

 

import  collections

# *****[Counter]*****

# 统计字符出现的次数
ret = collections.Counter('very good')
print(ret) #Counter({'o': 2, 'v': 1, 'e': 1, 'r': 1, 'y': 1, ' ': 1, 'g': 1, 'd': 1})
# 统计单词数
ret = collections.Counter('hello world python hello'.split())
print(ret) #Counter({'hello': 2, 'world': 1, 'python': 1})

# *****[defaultdict]*****
# 为字典的没有的key提供一个默认的值。参数应该是一个函数,当没有参数调用时返回默认值。如果没有传递任何内容,则默认为None
d = collections.defaultdict()
print(d) #defaultdict(None, {})
d = collections.defaultdict(int)
print(d) #defaultdict(<class 'int'>, {})
d['apple'] += 2
print(d) # defaultdict(<class 'int'>, {'apple': 2})
print(d['app']) # 0

# *****[OrderedDict]*****
o = collections.OrderedDict({"key1":"value1","key2":"value2","key3":"value3"})
print(o.get("key1")) # value1
print(o) # OrderedDict([('key1', 'value1'), ('key2', 'value2'), ('key3', 'value3')])

# *****[OrderedDict]*****
Person = collections.namedtuple('Person', ['age', 'height', 'name'])
Human = collections.namedtuple('Human', 'age, height, name')

# 实例化命令元组
tom = Person(30,178,'Tom')
jack = Human(20,179,'Jack')
print(tom) #Person(age=30, height=178, name='Tom')
print(jack) #Human(age=20, height=179, name='Jack')
print(tom.age,tom.height,tom.name) #30 178 Tom
print(jack.age,jack.height,jack.name) #20 179 Jack

# *****[deque]*****
d=collections.deque(['a',1,3])
d.append("python")
print(d) #deque(['hello', 'a', 1, 3, 'python'])
d.appendleft("hello")
print(d) #deque(['a', 1, 3, 'python'])

# *****[ChainMap]*****
d1 = {'apple':1,'banana':2}
d2 = {'orange':2,'apple':3,'pike':1}
d3 = {'hello':2,'opp':3,'app':1}
chain = collections.ChainMap(d1,d2,d3)
print(chain) #ChainMap({'apple': 1, 'banana': 2}, {'orange': 2, 'apple': 3, 'pike': 1}, {'hello': 2, 'opp': 3, 'app': 1})
print(chain.get("hello")) #2
print(dict(chain)) #{'hello': 2, 'opp': 3, 'app': 1, 'orange': 2, 'apple': 1, 'pike': 1, 'banana': 2}

 

 posted on 2021-08-06 14:12  boye169  阅读(30)  评论(0编辑  收藏  举报