容器 Collercions
- defaultdict
- counter
- deque
- namedtuple
- enum.Enum
defaultdict
与dict不同,不需要检查key是否存在
from collections import defaultdict
colours = {
('Yasoob', 'Yellow'),
('Ali', 'Blue'),
}
favourite_colours = defaultdict(list)
for name, colour in colours:
favourite_colours[name].append(colour)
print(favourite_colours)
print(favourite_colours['Yasoob'])
输出结果
defaultdict(<class 'list'>, {'Yasoob': ['Yellow'], 'Ali': ['Blue']})
['Yellow']
Counter
Counter是一个计数器
from collections import Counter
colours = (
('Yasoob', 'Yellow'),
('Ali', 'Blue'),
('Arham', 'Green'),
('Ali', 'Black'),
('Yasoob', 'Red'),
('Ahmed', 'Silver'),
)
favs = Counter(name for name, colour in colours)
print(favs)
print(favs['Ali'])
输出结果
Counter({'Yasoob': 2, 'Ali': 2, 'Arham': 1, 'Ahmed': 1})
2
deque
deque提供了一个双端队列,你可以从头/尾两端添加或删除元素。要 想使用它,首先我们要从collection中导入deque模块:
from collections import deque
d = deque()
d = deque()
d.append('1')
d.append('2')
d.append('3')
print(len(d))
print(d[0])
print(d[-1])
输出结果
3
1
3
作用类似于列表
d = deque(range(10))
print(len(d))
#取出左侧第一个元素
print(d.popleft())
#剩余队列
print(d)
#取出右侧第一个元素
print(d.pop())
#打印剩余的队列
print(d)
输出结果
10
0
deque([1, 2, 3, 4, 5, 6, 7, 8, 9])
9
deque([1, 2, 3, 4, 5, 6, 7, 8])
namedtuple
类似于元组,不能改变内部数据。
那 namedtuples 是什么呢?它把元组变成一个针对简单任务的容 器。你不必使用整数索引来访问一个 namedtuples 的数据。你可以像字典( dict)一样访问 namedtuples ,但 namedtuples 是不可变的。
from collections import namedtuple
#初始化一个animal 的对象,包含name age type 三个属性
animal = namedtuple('animal', 'name age type')
#初始化一个fruit的对象,包含name clour 两个属性
fruit = namedtuple('fruit', 'name clour ')
#定义apple 为fruit ,颜色为 red
apple = fruit(name = 'fruit', clour = 'red')
#定义perry 为animal,name为perry age 为30 type 为 cat
perry = animal(name = 'perry', age = 30, type = 'cat')
print(perry)
print(perry.age)
print(apple)
#转为字典格式
print(apple._asdict())
输出结果
animal(name='perry', age=30, type='cat')
30
fruit(name='fruit', clour='red')
{'name': 'fruit', 'clour': 'red'}
enum.Enum
枚举类型,是一种组织各种东西的方式,枚举可以有多种方式获取值
from collections import namedtuple
from enum import Enum
class Species(Enum):
cat = 1
dog = 2
horse = 3
aardvark = 4
butterfly = 5
owl = 6
platypus = 7
dragon = 8
unicorn = 9
kitten = 1
puppy = 2
Animal = namedtuple('Animal' , 'name age type')
perry = Animal(name = 'Perry', age = 31, type = Species.cat)
drongon = Animal(name = 'Drongon', age = 4, type = Species.dragon)
tom = Animal(name = 'Tom', age = 75, type=Species.cat)
charlie = Animal(name = 'Charlie', age = 2, type = Species.kitten)
print(Species(1))
print(Species['cat'])
print(Species.cat)
print(perry.age)
print(drongon.type)
输出结果
Species.cat
Species.cat
Species.cat
31
Species.dragon