先简单介绍一些常用的标准模块
使用setdefault()和defaultdict()处理缺失的键
读取字典中不存在的键值会抛出异常,使用字典函数get()返回一个默认值会避免异常发生。函数setdefault()类似于get(),当键不存在时会在字典中添加一项
>>> dict_test = {'a':'aaa','b':'bbb','c':'ccc'}
>>> print(dict_test)
{'a': 'aaa', 'b': 'bbb', 'c': 'ccc'}
>>> dict_test.setdefault('d','ddd')
'ddd'
>>> print(dict_test)
{'a': 'aaa', 'b': 'bbb', 'c': 'ccc', 'd': 'ddd'}
>>>
如果试图把一个不同的默认值赋给已经存在的键,不会改变原来的值,仍将返回初始值
>>> dict_test.setdefault('c','1234a')
'ccc'
>>> print(dict_test)
{'a': 'aaa', 'b': 'bbb', 'c': 'ccc', 'd': 'ddd'}
defaultdict()是在创建字典时,对每个新的键都会指定默认值。它的参数是一个函数。返回赋给缺失键的值。
>>> from collections import defaultdict
>>> dict_table = defaultdict(int)
>>> dict_table['abc'] = 1
>>> print(dict
dict( dict_table dict_test
>>> print(dict_table['bcd'])
0
自定义函数返回值作为默认值
>>> def default_return():
... return "it's default"
...
>>> bestiary = defaultdict(default_return)
>>> bestiary['item1'] = 22
>>> bestiary['item2'] = 23
>>> print(bestiary['ccc'])
it's default
使用Counter()计数
Counter()可以作为计数功能使用
from collections import Counter
breakfase = ['milk','eggs','cooking']
breakfase_counter = Counter(breakfase)
print(breakfase_counter)
>>> Counter({'milk': 1, 'eggs': 1, 'cooking': 1})
most_common() 以降序返回所有元素
如果给定一个数字,会返回该数字前的元素
>>> breakfast = ['egg','milk','cook','oriange']
>>> breakfast_counter = Counter(breakfast)
>>> breakfast_counter.most_common()
[('egg', 1), ('milk', 1), ('cook', 1), ('oriange', 1)]
>>> breakfast_counter.most_common(2)
[('egg', 1), ('milk', 1)]
使用有序字典OrderedDict() 按键排序
有序字典OrderedDict()记忆字典键添加的顺序,然后从一个迭代器安装相同的顺序返回。
>>> quotes = {\
... 'hello':'yes',
... 'larry':'marry',
... 'test':'its test'}
>>> from collections import OrderedDict
>>> item_a = OrderedDict(quotes)
>>> for i in item_a:
... print(i)
...
hello
larry
test
双端队列:栈+队列
deque是一种双端队列,同时具有栈和队列的特征,它可以从序列的任何一端添加和删除项。
- popleft() 去掉最左边的项并返回该项
- pop()去掉最右边的项并返回该项
使用itertools迭代代码结构
itertools包含特殊用途的迭代器函数,在for...in循环中调用迭代函数,每次会返回一项并记住当前调用的状态
>>> import itertools
>>> for item in itertools.chain([1,2],['a','b']):
... print(item)
...
1
2
a
b
- cycle()在参数之间无限循环的迭代器函数
>>> for item in itertools.cycle([1,2]):
... print(item)
- accumulate() 计算累积的值,默认计算累积和
>>> for item in itertools.accumulate([1,2,3,4]):
... print(item)
...
1
3
6
10
accumulate的第二个参数,可以指定运算函数。
# 返回两个数的乘积
import itertools
import operator
for item in itertools.accumulate([1, 2, 3, 4, 5], func=operator.mul):
print(item)
使用pprint()友好输出
使用pprint()要比print()的可读性要强。是一个友好输出函数
网友评论