必学标准库 collections
标准库参考文件
一、defaultdict
在创建字典时,对每个新的键都会指定一个默认值。
这个默认值的参数是一个函数,函数返回的值就会作为初始字典每个键的默认值。
# 1. 默认值是整数
from collections import defaultdict
dic_int = defaultdict(int)
print(dic_int)
dic_int['a'] ='hello'
result =dic_int['b']
print(result)
print(dic_int)
# 2. 默认值是列表
dic_list = defaultdict(list)
print(dic_val)
dic_list['disk_info'].append(1)
print(dic_list)
# 3. 默认值是字典
dic_dict = defaultdict(dict)
print(dic_val)
dic_dict['base_info'].update({"host_name": "dbserver1"})
base_info = dic_dict.get('base_info')
h_name = base_info.get('host_name')
print(h_name)
# 4. 默认值是自定义的值
def default_val():
return "默认没有此 key"
dic_val = defaultdict(default_val)
print(dic_val)
dic_val['a']='hello'
ret = dic_val['b']
print(dic_val)
# 5. 也可以是匿名函数
dic_val = defaultdict(lambda: '默认没有此 key')
# 6. 不给传参,默认值则是 None
dic_none = defaultdict()
二、OrderDict 有序字典
有序字典 OrderDict()
会记住字典添加的顺序,然后按照原来添加时的相同顺序返回 。
from collections import OrderedDict
dic_order = OrderedDict([('M', 1),('Q', 2),
('A', 3)
])
for key in dic_order:
print(key)
目前 Python3.x 的字典都是有序的,但不代表在 Python3.x 中 OrderDict 就和
dict()
无差别了。 看下面的例子。
from collections import OrderedDict
d = OrderedDict()
d['a'] =1
d['b'] =2
d['c'] =3
print(d)
# OrderedDict([('a', 1), ('b', 2), ('c', 3)])
item = d.popitem()
print(item) # ('c', 3)
print(d) # OrderedDict([('a', 1), ('b', 2)])
d.move_to_end('a')
print(d) # OrderedDict([('b', 2), ('a', 1)])
从以上示例中可以看出,OrderedDict 还提供了两个方法:
popitem()
可以删除字典中的键值对儿,并且的大这个键值对儿,而默认的dict
对象只提供了pop()
方法,这个方法只能返回值。move_to_end('key')
可以指定某一个键值对儿放到整个字典的最后。
三、deque 双端队列
deque 具有栈和队列的特征。
可以从序列的任意一端添加和删除元素。
from collections import deque
dq = deque('hello')
left_result = dq.popleft()
right_result = dq.pop()
print(left_result)
print(right_result)
四、namedtuple 命名元组
from collections import namedtuple
Person = namedtuple('Person', ['name','age'])
p1 = Person("shark", 18)
print(p1.name)
print(p1.age)
五、Counter 计数器
li = ['hello','qf','yangge','qf','yangge','hello','qf','yangge']
c1 = Counter(li)
# 倒序
item1 = c1.most_common()
# 只输出次数大于 1 的
item2 = c1.most_common(1)
# 相加减
l2 = ("yangge","shark","xiguatian","yangge","shark","xiguatian")
c2 = Counter(l2)
c1 + c2
c1 - c2
# 交集 得到共有的
c1 & c2
# 并集 得到所有的
c1 | c2
六、ChainMap 把多个字典合并进行循环
1. 未使用 ChainMap
d1 = {'a': 1, 'b': 2}
d2 = {'c': 3, 'e': 4}
for k, v in d1.items():
print(k, v)
for k, v in d2.items():
print(k, v)
"""
a 1
b 2
c 3
e 4
"""
2.使用 ChainMap
键无重复
d1 = {'a': 1, 'b': 2}
d2 = {'c': 3, 'e': 4}
new_dic = ChainMap(d1,d2)
for k, v in new_dic.items():
print(k, v)
"""
e 4
a 1
b 2
c 3
"""
创建的时候键有重复
d1 = {'a': 1, 'c': 2}
d2 = {'c': 3, 'e': 4}
new_dic = ChainMap(d1,d2)
for k, v in new_dic.items():
print(k, v)
"""
e 4
c 2
a 1
"""
更新的时候 键有重复
d1 = {'a': 1, 'c': 2}
d2 = {'c': 3, 'e': 4}
new_dic = ChainMap(d1,d2)
for k, v in new_dic.items():
print(k, v)
print('*' * 10)
new_dic.update({'c': 30})
for k, v in new_dic.items():
print(k, v)
"""
e 4
c 2
a 1
**********
e 4
c 30
a 1
"""
网友评论