二十九、深入Python中的collections模块( 二 )
defaultdict在使用字典的时候, 如果在使用不存在的key的时候发生KeyError这样的一个报错, 这时候就该defaultdict登场了 。
defaultdict接受一个工厂函数作为参数来构造:dict =defaultdict( factory_function)
这个factory_function可以是list、set、str等等 , 作用是当key不存在时 , 返回的是工厂函数的默认值 , 比如list对应[ ] , str对应的是空字符串 , set对应set( ) , int对应0 , 如下举例:
from collections import defaultdictdict1 = defaultdict(int)dict2 = defaultdict(set)dict3 = defaultdict(str)dict4 = defaultdict(list)dict1[2] ='two'print(dict1[1])print(dict2[1])print(dict3[1])print(dict4[1])# 输出如下0set()[]
defaultdict类接受类型名称作为初始化函数的参数 , 这样使得默认值的取值更加灵活 。
s = 'mynameisrunsen'd = collections.defaultdict(int)for k in s:d[k] += 1print(d)# 输出如下defaultdict(
练习有如下值集合 [11,22,33,44,55,66,77,88,99,99] 。
下面将所有大于 55的值保存至字典的第一个key中 , 将小于 55 的值保存至第二个key的值中 。
下面通过defaultdict默认字典对列表进行划分 。
all_list = [11,22,33,44,55,66,77,88,99]dic = collections.defaultdict(list)for i in all_list:if i > 55:dic['k1'].append(i)else:dic['k2'].append(i)print(dic)# 输出如下defaultdict(
也可以使用字典 , 具体代码如下 。
all_list = [11,22,33,44,55,66,77,88,99]dic = {}for i in all_list:if i > 55:if "k1" in dic.keys():dic['k1'].append(i)else:dic['k1'] = [i,]else:if "k2" in dic.keys():dic['k2'].append(i)else:dic['k2'] = [i,]print(dic)# 输出如下{'k2': [11, 22, 33, 44, 55], 'k1': [66, 77, 88, 99]}
namedtuplenamedtuple是用来创建一个自定义的tuple对象 , 并且规定了tuple元素的个数 , 并可以用属性而不是索引来引用tuple的某个元素 。
使用命名元组的步骤:
# 将元组封装为一个类 , 可以通过字段名(属性名)来访问元组中的值# 支持元组的所有操作from collections import namedtuple# 1、定义一个类Runsen = namedtuple('Runsen', ['name','sex','age'])# 2、创建对象runsen = Runsen("Runsen", "帅男", 21)# 3、获取命名元组的值print(runsen[1])# 支持元组的索引取值print(runsen[-2:])# 支持切片print(runsen.name)# 支持通过字段名来取值 # _fields , 获取命名元组的所有属性名print(runsen._fields)# _asdict方法 , 将元组转化为字典print(runsen._asdict())# 输出如下帅男('帅男', 21)Runsen('name', 'sex', 'age')OrderedDict([('name', 'Runsen'), ('sex', '帅男'), ('age', 21)])
?
本文已收录 GitHub , 传送门~[1], 里面更有大厂面试完整考点 , 欢迎 Star 。
?
Reference[1]
传送门~:
- 空调|让格力、海尔都担忧,中国取暖“新潮物”强势来袭,空调将成闲置品?
- 占营收|华为值多少钱
- 俄罗斯手机市场|被三星、小米击败,华为手机在俄罗斯排名跌至第三!
- 页面|如何简单、快速制作流程图?上班族的画图技巧get
- 操盘|中兴统一操盘中兴、努比亚、红魔三大品牌
- 印度|拒绝华为后,印度、英国斥资数十亿求助日本
- 华为|台积电、高通、华为、小米接连宣布!美科技界炸锅:怎么会这样!
- 拍照|iPhone12还没捂热13就曝光了,屏幕、信号、拍照均有升级!
- 路由器|家里无线网经常断网、网速慢怎么办?教你几个小窍门,轻松解决
- 一图看懂!数字日照、新型智慧城市这样建(上篇)|政策解读 | 新型