2022年2月12日 星期六

[Python] 常用Collections:namedtuple、defaultdict、OrderedDict

 

1. namedtuple

tuple是immutable的,初始化後值就無法改變

namedtuple適用於想存一個不希望有人改值的資料時


>>> from collections import namedtuple
>>> Student = namedtuple('Student', ['name', 'age'])
>>> a = Student('Tom', 20)
>>> a.name
'Tom'
>>> a.age
20
>>> a.age=21
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: can't set attribute



2. defaultdict

defaultdict實作了dict的所有方法

差別在defaultdict若存取了一個不存在的key時,defaultdict並不會拋出KeyError,而是會回傳預設值


>>> from collections import defaultdict
>>> a = defaultdict(int)
>>> a['1']
0
>>> a['1'] = 999
>>> a['1']
999


比較要注意的是初始化defaultdict,要帶的參數是一個constructor

如果寫成這樣defaultdict(0),是會有TypeError

若想設定預設值回3,可以寫個function:def three(): return 3,然後defaultdict(three)


3. OrderedDict

有dict功能再加上能做key排序

有兩個方法

- popitem(last=True):如果last=True則LIFO (後進先出),若為false則FIFO (先進先出)

- move_to_end(key, last=True):如果last=True則key移到最尾,若為false則key移到最前





沒有留言:

張貼留言