Python容器包括:
1.defaultdict
与dict类型不同,你不需要检查key是否存在
from collections import defaultdict
colours=(('yasoob','yellow'),('Ali','Blue'))
favorite_colors=defaultdict(list)
for name,colour in colours:
favorite_colors[name].append(colour)
print(favorite_colors)
输出:defaultdict(<class ‘list’>, {‘yasoob’: [‘yellow’], ‘Ali’: [‘Blue’]})
当你在一个字典中对一个键进⾏嵌套赋值时,如果这个键不存
在,会触发keyError异常。 defaultdict允许我们用一个聪明的方式绕过这个问题。
import collections
import json
tree=lambda:collections.defaultdict(tree)
some_dict=tree()
some_dict['colours']['favorite']="yellow"
print(json.dumps(some_dict))
输出:{“colours”: {“favorite”: “yellow”}}
2.counter
Counter是个计数器,它可以帮助我们针对某项数据进行计数。比如它可以来计算每个
人喜欢多少种颜色:
from collections import Counter
colours=(('yy','yellow'),('aa','blue'),('yy','red'))
favs=Counter(name for name,colour in colours)
print(favs)
输出:Counter({'yy': 2, 'aa': 1})
我们也可以在利用它统计一个文件,例如:
with open('filename', 'rb') as f:
line_count = Counter(f)
print(line_count)
3.deque
deque提供了一个双端队列,你可以从头/尾两端添加或删除元素。要想使用它,首先我们
要从collections中导出deque模块:
from collections import deque
d=deque()
d.append('a')
d.append('1')
print(len(d))
print(d[0])
d2=deque(range(5))
d2.popleft()#从左端取出数据
d2.pop()#从右端取出数据
d=deque(maxlen=30) #限制列表大小
d=deque([1,3,4])
d.extendleft([0])从左侧扩展
d.extend([5]) 从右侧扩展
4.namedtuple
您可能已经熟悉元组。
一个元组是一个不可变的列表,你可以存储⼀个数据的序列,它和命名元组
(namedtuples)非常像,但有几个关键的不同。
主要相似点是都不像列表,你不能修改元组中的数据。为了获取元组中的数据,你需要使
用整数作为索引:
from collections import namedtuple
Animal=namedtuple('Animal','name age type six')
perry=Animal(name='pertty',age=33,type='cat',six='man')
print(perry)
输出:Animal(name='pertty', age=33, type='cat', six='man')
现在你可以看到,我们可以用名字来访问namedtuple中的数据。我们再继续分析它。
一个命名元组(namedtuple)有两个必需的参数。它们是元组名称和字段名称。
在上面的例子中,我们的元组名称是Animal,字段名称是’name’,‘age’和’type’。
namedtuple让你的元组变得自文档了。你只要看一眼就很容易理解代码是做什么的。
你也不必使用整数索引来访问一个命名元组,这让你的代码更易于维护。
而且,namedtuple的每个实例没有对象字典,所以它们很轻量,与普通的元组比,并不
需要更多的内存。这使得它们比字典更快。
然而,要记住它是一个元组,属性值在namedtuple中是不可变的,所以下面的代码不能
工作:
perry.age=43
显示错误:AttributeError: can't set attribute
向后兼容于普通元祖,故可以用整数索引:
print(perry[1])
输出:33
也可以将namedtuple转换为dict
print(perry._asdict())
输出:{'name': 'perry', 'age': 33, 'type': 'cat', 'six': 'man'}
5.enum.Enum (包含在Python 3.4以上)
枚举模块:
from enum import Enum
class Species(Enum):
cat=1
dog=2
dragon=3
print(Species(1))
print(Species.cat)
print(Species['cat'])
这三种方法都可访问枚举数据