【python】collections 模块

collections 是 Python 内建的一个集合模块,提供了许多有用的集合类。(非常有趣)

from collections import namedtuple
 
Point = namedtuple('Point',['x','y'])    #创建模板
#        namedtuple("名称",【属性list】)
p = Point(1,2)    #传入内容
print(p.x)    #结果是 :1
print(p.y)    #结果是 :2

namedtuple可以很方便地定义一种数据类型,它具备 tuple 的不变性,又可以根据属性来引用,使用十分方便

defaultdict

使用 dict 时,如果引用的 Key 不存在,就会抛出 KeyError。如果希望 key 不存在时,返回一个默认值,就可以用 defaultdict:

from collections import defaultdict
dd = defaultdict(lambda: 'N/A')
dd['key1'] = 'abc'
dd['key1'] # key1存在
>>>'abc'
dd['key2'] # key2不存在,返回默认值
'N/A'
注意默认值是调用函数返回的,而函数在创建defaultdict对象时传入。

除了在 Key 不存在时返回默认值,defaultdict 的其他行为跟 dict 是完全一样的。
之前有个帖子问 python 中异常的作用,这个 返回默认值 就是个很好的例子。
一般情况,如果没有 key,则 python 抛出异常。
这时候我们可以 try 然后 except 写一段捕获异常的代码 ,但略显复杂。
所以我一般都是设一个默认值。(简单···)

Counter

Counter 是一个简单的计数器,例如,统计字符出现的个数:

from collections import Counter
c = Counter()
for ch in 'programming':
    c[ch] = c[ch] + 1
c
>>> Counter({'g': 2, 'm': 2, 'r': 2, 'a': 1, 'i': 1, 'o': 1, 'n': 1, 'p': 1})

Counter 实际上也是 dict 的一个子类,上面的结果可以看出,字符’g’、‘m’、’r’各出现了两次,其他字符各出现了一次。

这个 Counter 非常有趣,很有用。

a = Counter('ABCabcABC123')
print(a)
>>> Counter({'A': 2, 'B': 2, 'C': 2, 'a': 1, 'b': 1, 'c': 1, '1': 1, '2': 1, '3': 1})	

觉得 collections 这个模块契合 python 特质,简单易用有趣 ~