1.14 跟 1.13 也是應用 operator 模組,這次用的是 attrgetter。應用這個,就可以方便的進行排序而無需自行寫比較函數了。 sorted(users, key=attrgetter('user_id'))
1.15 講的是 group,依據元素裡的某屬性來做分類。除了使用前面提到的 itemgetter 之外,還使用了 itertools.groupby 函式。
1.16 篩選:這可以用 comprehension 輕易達成,像是 [n for n in mylist if n>0] 這樣,或者也可以利用 filter() 函式達成。在討論裡有提到 itertools.compress 函式,這個函式可以根據第二個 list 裡的 boolean 來決定要取出第一個 list 裡的哪些元素,例如 list(compress(['a', 'b', 'c', 'd'], [False, True, False True])) 會得到 ['b', 'd']。
1.17 從 dict 提取所需的部分:這也是應用 comprehension 來達成, p2 = { key:value for key,value in prices.items() if key in tech_names }
1.18 namedtuple :介紹 collections.namedtuple ,這個很方便,可以簡易的做出一個簡單的類別,又具有 tuple 的特性,而不用寫 class,例如: Animal = namedtuple('Animal', ['name', 'description']) : animal = Animal('Bird', 'Can fly')
1.19 介紹 generator expression,說真的,我快搞不清楚 comprehension 跟 generator expression 的差別了,這篇 python - Generator Expressions vs. List Comprehension - Stack Overflow 有說明,大致上的差異就是在於 generator expression 傳回的結果無法以 indexer 存取,也就是不能用 [0] 這樣的形式來存取。實際上 generator expression 傳回的形態是 generator,而 list comprehension 傳回的形態是 list。
1.20 介紹 collections.ChainMap ,這可以把兩個 dict 結合在一起,看起來像是一個 dict ,實際上在存取時,會去真正的 dict 拿。另外一個是用 dict 原本的 update method 來做,但這速度上就會比 ChainMap 來的慢了,因為需要做複製的動作。
- Oct 29 Tue 2013 14:01
Python Cookbook 1.14~1.20
close
文章標籤
全站熱搜
留言列表
發表留言