简介
collections 是 python 的内置模块,提供了很多方便且高性能的关于集合的操作,掌握这些知识有助于提高代码的性能和可读性。
常用功能
计数器(Counter)
双端队列(deque)
默认字典(defaultdict)
有序字典(OrderedDict)
具名元组(namedtuple)
计数器(Counter)
res = 'RUN FAST, HIT FAST, WIN FAST'
统计字符串中所有字符的出现次数
传统写法
new_dict = {}for i in res:
if i not in new_dict:
new_dict[i] = 1
else:
new_dict[i] += 1print(new_dict)
# {'R': 1, 'U': 1, 'N': 2, ' ': 5, 'F': 3, 'A': 3, 'S': 3, 'T': 4, ',': 2, 'H': 1, 'I': 2, 'W': 1}
Counter写法
from collections import Counter
r = Counter(res)print(r) # Counter({' ': 5, 'T': 4, 'F': 3, 'A': 3, 'S': 3, 'N': 2, ',': 2, 'I': 2, 'R': 1, 'U': 1, 'H': 1, 'W': 1})print(r.get('F')) # 5 可以当成字典使用
双端队列(deque)
队列
import queue
q = queue.Queue(3) # 指定最大存放元素个数 3# 存放元素
q.put(111)
q.put(222)
q.put(333)# q.put(444) # 如果队列满了 继续添加则原地等待 相当于一直等待不往下运行# 获取元素print(q.get())print(q.get())print(q.get())# print(q.get()) # 如果队列空了 继续获取则原地等待 相当于一直等待不往下运行
双端队列
from collections import deque
d = deque([1, 2, 3])
d.append(4)print(d) # deque([1, 2, 3, 4])
d.appendleft(0) # 从左加print(d) # deque([0, 1, 2, 3, 4])
print(d.pop()) # 4 默认从右弹出元素print(d.popleft()) # 0 从左弹出元素
默认字典(defaultdict)
有如下值集合 [11,22,33,44,55,67,77,88,99],
将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。
普通字典
l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99]
new_dict = {'k1': [], 'k2': []}for i in l1:
if i > 66:
new_dict['k1'].append(i)
else:
new_dict['k2'].append(i)print(new_dict) # {'k1': [77, 88, 99], 'k2': [11, 22, 33, 44, 55, 66]}
默认字典
from collections import defaultdict
l2 = [11, 22, 33, 44, 55, 66, 77, 88, 99]
new_dict2 = defaultdict(list) # 字典所有的值默认都是列表{'': [], '': []}for i in l2:
if i > 66:
new_dict2['k1'].append(i)
else:
new_dict2['k2'].append(i)print(new_dict2) # defaultdict(<class 'list'>, {'k2': [11, 22, 33, 44, 55, 66], 'k1': [77, 88, 99]})
有序字典(OrderedDict)
普通字典:内部是无序的
d1 = dict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])print(d1) # {'k2': 'v2', 'k1': 'v1', 'k3': 'v3'} # 内部无序 每次打印顺序都可能与上一次不同print(d1.keys()) # dict_keys(['k1', 'k2', 'k3'])
有序字典
from collections import OrderedDict
d2 = OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])print(d2) # OrderedDict([('k1', 'v1'), ('k2', 'v2'), ('k3', 'v3')])
d2['k1'] = 111print(d2) # OrderedDict([('k1', 111), ('k2', 'v2'), ('k3', 'v3')])print(d2.keys()) # odict_keys(['k1', 'k2', 'k3'])
具名元组(namedtuple)
# 生成可以使用名字来访问元素内容的tuplefrom collections import namedtuple# 1.先产生一个元组对象模板
point = namedtuple('长宽高', 'x, y, z')# 2.创建数据
p1 = point('5cm', '1cm', '4cm')
p2 = point(7, 8, 9)print(p1, p2) # 长宽高(x='5cm', y='1cm', z='4cm') 长宽高(x=7, y=8, z=9)print(p1.x) # 5cmprint(p1.y) # 1cm
标签:Python,k2,k1,collections,模块,print,new,字典,dict From: https://www.cnblogs.com/DTCLOUD/p/17238738.html作者:陈超