Python的Collections

defaultdict

不需要检查key是否存在

from collections import defaultdict

demo = (('a',1),('b',2),('c',3),('d',4))
print(dict(demo))

default_demo = defaultdict(list)    # 默认values为list列表,并且key不存在不会报异常
for k, v in demo:
    default_demo[k].append(v)
print(default_demo)

在字典中对键进行嵌套操作

from collections import defaultdict
tree = lambda : defaultdict(tree)
demo_dict = tree()
demo_dict['a']['b']['c'] = 'ok'
import json
print(json.dumps(demo_dict))
# {"a": {"b": {"c": "ok"}}}

OrderedDict

使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。

from collections import OrderedDict
d = dict([('a',1),('w',2),('c',3)])	# key无序
print(d)
od = OrderedDict([('a', 1), ('b', 2), ('c', 3)])	# key有序
print(od)

od = OrderedDict()	# 这里按照插入key的顺序返回
od['z'] = 1
od['y'] = 2
od['x'] = 3
print(od.keys())

counter

Counter 是一个计数器,帮助我们对某一项数据进行计数。
Counter 实际上也是 dict 的一个之类。

from collections import Counter
demo = (('a',1),('b',2),('c',3),('d',4),('d',6))
result = Counter(k for k, v in demo)
print(result)
# Counter({'d': 2, 'a': 1, 'b': 1, 'c': 1})

c = Counter()
for i in 'dmeosscc':
	c[i] += 1
print(c)

deque

提供了一个双端队列,你可以从头/尾两端添加或删除元素

  • 设置列表的长度
  • 左右都可以添加和删除
from collections import deque

d = deque(maxlen=10)    # 当超过10,数据会从另一端删除
d.append('1')
d.append('2')
d.append('3')
d.extend(['4','5','6'])
d.extendleft('0')
print(len(d), d)
print(d.popleft())
print(d.pop())
print(d)

# 7 deque(['0', '1', '2', '3', '4', '5', '6'], maxlen=10)
# 0
# 6
# deque(['1', '2', '3', '4', '5'], maxlen=10)

nametuple

命名元组(nametuple),将元组变成简单的容器,不必用索引来访问数据,可以像字典一样访问nametuple,但是nametuple是不可变的。

from collections import namedtuple

Apple = namedtuple('Apple','x y')
a = Apple(1,2)
print(a.x)
print(a.y)
# 1
# 2
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值