Python标准库中提供了很多扩展功能,大幅度提高了开发效率。这里主要介绍OrderedDict类、defaultdict类和Counter类。
(1)OrderedDict类
Python内置字典dict是无序的,如果需要一个可以记住元素插入顺序的字典,可以使用collections.OrderedDict。例如:
>>> import collections
>>> x = collections.OrderedDict() #有序字典
>>> x['a'] = 3
>>> x['b'] = 5
>>> x['c'] = 8
>>> x
OrderedDict([('a', 3), ('b', 5), ('c', 8)])
(2)defaultdict类
使用collections模块的defaultdict类来统计字符出现频次。
>>> import string
>>> import random
>>> x = string.ascii_letters + string.digits + string.punctuation
>>> y = [random.choice(x) for i in range(1000)]
>>> z = ''.join(y)
>>> from collections import defaultdict
>>> frequences = defaultdict(int) #所有值默认为0
>>> frequences
defaultdict(<class 'int'>, {})
>>> for item in z:
frequences[item] += 1 #修改每个字符的频次
>>> frequences.items()
创建defaultdict对象时,传递的参数表示表示字典中值的类型,除了上面代码演示的int类型,还可以是任意合法的Python类型。
>>> from collections import defaultdict
>>> games = defaultdict(list) #使用list作为值类型
>>> games #所有值默认为空列表
defaultdict(<class 'list'>, {})
>>> games['name'].append('dong') #可直接为字典games添加元素
>>> games['name'].append('zhang')
>>> games['score'].append(90)
>>> games['score'].append(93)
>>> games
defaultdict(<class 'list'>, {'score': [90, 93], 'name': ['dong', 'zhang']})
(3)Counter类
对于频次统计的问题,使用collections模块的Counter类可以更加快速地实现这个功能,并且能够提供更多的功能,例如查找出现次数最多的元素。
>>> from collections import Counter
>>> frequences = Counter(z) #这里的z还是前面代码中的字符串对象
>>> frequences.items()
>>> frequences.most_common(1) #返回出现次数最多的1个字符及其频率
>>> frequences.most_common(3) #返回出现次数最多的前3个字符及其频率