1. 程式人生 > >集合妙用的收集

集合妙用的收集

其中 blog 語言 插入 目的 bcd odi ise fse

1)字典: 有序性

collections模塊:

1.OrderedDict: 有序字典

2.defaultdict: 帶有默認值的字典

OrderedDict:

使用dict時,Key是無序的。在對dict做叠代時,我們無法確定Key的順序。

如果要保持Key的順序,可以用OrderedDict

技術分享
>>> from collections import OrderedDict
>>> d = dict([(‘a‘, 1), (‘b‘, 2), (‘c‘, 3)])
>>> d # dict的Key是無序的
{‘a‘: 1, ‘c‘: 3, ‘b‘: 2}
>>> od = OrderedDict([(‘a‘, 1), (‘b‘, 2), (‘c‘, 3)])
>>> od # OrderedDict的Key是有序的
OrderedDict([(‘a‘, 1), (‘b‘, 2), (‘c‘, 3)])
技術分享

意,OrderedDict的Key會按照插入的順序排列,不是Key本身排序:

>>> od = OrderedDict()
>>> od[‘z‘] = 1
>>> od[‘y‘] = 2
>>> od[‘x‘] = 3
>>> od.keys() # 按照插入的Key的順序返回
[‘z‘, ‘y‘, ‘x‘]

2.defaultdict: 帶有默認值的字典

有如下值集合 [11,22,33,44,55,66,77,88,99,90...],將所有大於 66 的值保存至字典的第一個key中,將小於

66 的值保存至第二個key的值中。

技術分享
from collections import defaultdict

values = [11, 22, 33,44,55,66,77,88,99,90]

my_dict = defaultdict(list)

for value in  values:
    if value>66:
        my_dict[k1].append(value)
    else:
        my_dict[k2].append(value)
View Code

另外他可以直接引用,不需要重新定義key

>>> from
collections import defaultdict >>> dd = defaultdict(lambda: N/A) >>> dd[key1] = abc >>> dd[key1] # key1存在 abc >>> dd[key2] # key2不存在,返回默認值 N/A

3)collections模塊:Counter類的目的是用來跟蹤值出現的次數。它是一個無序的容器類型,以字典的鍵值對形式存儲,其中元素作為key,其計數作為value。計數值可以是任意的Interger(包括0和負數)。Counter類和其他語言的bags或multisets很相似。

c = Counter(‘abcdeabcdabcaba‘)
print c
輸出:Counter({‘a‘: 5, ‘b‘: 4, ‘c‘: 3, ‘d‘: 2, ‘e‘: 1})

它算出所有的值,最後都會變成字典。

集合妙用的收集