Counter 统计可散列的对象
初始化
c = Counter()
c = Counter(可迭代对象)
c = Counter(字典)
统计次数
most_common(n)生成一个序列,其中包含n个最常遇到的输入值及相应计数
c.most_common()
算数操作
c1 = Counter(dic1)
c2 = Counter(dic2)
c1 + c2
c1 - c2
c1 & c2 取相同元素
c1 | c2 取全部元素
defaultdict 缺失的键返回默认值
d = defaultdict(lambda : 'default value', foo='bar')
-----------------------result------------------------------
defaultdict(<function <lambda> at 0x000001D732C7C1E0>, {'foo': 'b'})
l = [('a',2),('b',3),('a',1),('b',4),('a',3),('a',1),('b',3)]
# 默认列表
d = collections.defaultdict(list)
for k,v in l:
d[k].append(v)
>>> d
>>> defaultdict(<class 'list'>, {'a': [2, 1, 3, 1], 'b': [3, 4, 3]})
# 默认集合
d = collections.defaultdict(set)
for k,v in l:
d[k].add(v)
>>> d
>>> defaultdict(<class 'set'>, {'a': {1, 2, 3}, 'b': {3, 4}})
# 默认int
d = collections.defaultdict(int)
objs = [{'F29958SVDK6': 12}, {'F29958SVDK6': 12}, {'F29958SVDK6': 12}, {'F29958SVDK6': 12}, {'F29958SVDK6': 12}]
for obj in objs:
for k,v in obj.items():
d[k] += v
>>> d
>>> defaultdict(<class 'int'>, {'F29958SVDK6': 60})
deque双端队列(可从任意一端添加或删除元素)
# 从右边加入
d1 = deque()
d1.extend('abcd')
d1.append('e')
# 从左边加入
d2 = deque()
d2.extendleft(range(6))
d2.appendleft(6)
取值
d1 = deque(range(6))
while True:
try:
print(d1.pop(), end='')
except IndexError:
break
print
---------------result--------------------
543210
d1 = deque(range(6))
while True:
try:
print(d1.popleft(), end='')
except IndexError:
break
print
---------------result--------------------
012345
旋转
# 正向旋转
d = deque(range(10))
d.rotate(2)
----------------result--------------------
deque([8, 9, 0, 1, 2, 3, 4, 5, 6, 7])
# 反向旋转
d = deque(range(10))
d.rotate(2)
----------------result--------------------
deque([2, 3, 4, 5, 6, 7, 8, 9, 0, 1])
OrdereDict 有序字典,内部维护着一个根据键插入顺序排序的双向链表。每次当一个新的元 素插入进来的时候,它会被放到链表的尾部。对于一个已经存在的键的重复赋值不会 改变键的顺序。
d = collections.OrderedDict()
d['a']=1
d['b']=2
d['c']=3
print(d)
>>> OrderedDict([('a', 1), ('b', 2), ('c', 3)])
move_to_end(key, last=True) 移动元素(默认移动到最后面)
d.move_to_end('a')
print(d)
>>> OrderedDict([('b', 2), ('c', 3), ('a', 1)])
d.move_to_end('c', last=False)
>>> OrderedDict([('c', 3), ('a', 1), ('b', 2)])
popitem(last=True) 删除元素,默认先进后出
OrderedDict([('c', 3), ('a', 1), ('b', 2)])
d.popitem()
>>> OrderedDict([('c', 3), ('a', 1)])
namedtuple 命名元组
>>> from collections import namedtuple
>>> city = namedtuple('city', 'name country population coordinates')
>>> china = city('china', 'cn', '14亿', (1,1))
>>> china
city(name='china', country='cn', population='14亿', coordinates=(1, 1))
>>> china.population
'14亿'
>>> china[1]
'cn'
>>>
_fields类属性
>>> china._fields
('name', 'country', 'population', 'coordinates')
_make() 通过一个可迭代对象来生成一个实例
>>> LatLong = namedtuple("latlong", "lat long")
>>> morben = ('Delhi NCR', 'IN', 21.935, LatLong(28.613889, 77.208889))
>>> morben = city._make(morben)
>>> morben
city(name='Delhi NCR', country='IN', population=21.935, coordinates=latlong(lat=28.613889, long=77.208889))
_asdict() 以 collections.OrderedDict 的形式返回
>>> for k,v in morben._asdict().items():
... k,v
...
('name', 'Delhi NCR')
('country', 'IN')
('population', 21.935)
('coordinates', latlong(lat=28.613889, long=77.208889))