close
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 來的慢了,因為需要做複製的動作。

arrow
arrow

    elleryq 發表在 痞客邦 留言(0) 人氣()