1、引言
小屌丝:鱼哥,这七夕过完了,周末也过完了, 你这两天没少忙活吧!!
小鱼:怎么叫没少忙活? 你这话里有话啊!
小屌丝:我嘴笨,不会用高大尚的词汇来描述~ ~
小鱼:你可以 gu wen 了…
小屌丝:别啊,我这还有个问题要问你呢 。
小鱼:不会,不了解,不知道!!
小屌丝:是妹子让我问…关于python原生字典的知识…
小鱼:妹子啊,妹子不妹子的无所谓,我就是单纯的分享知识…
小屌丝:我信你个鬼…你个糟老头子,坏的狠~ ~
小鱼:不信就不信,妹子信就行。
今天我们来分享一下, Python原生字典的终结者,也是一款黑科库,
自动我用了这个库,从此告别双手 原生字典。
2、munch库介绍
在介绍munch库之前,我们先唠叨一下Python字典,
字典是Python中基础的数据结构之一,使用字典,必须要简单粗暴,
但是,即使这么一个无欲无求,与世无争的数据结构,仍然有不少人"很隔路",看不惯它。
解释一下"隔路":
隶属东北话,东北方言,
意思:爱搞特殊,与众不同,不合群…
王大爷:这一局,我认输。
王大妈:这仅仅代表他自己,我表示不服。
小鱼:这都凌晨一点了,大爷大妈,还不睡呢!!!
待王大爷和大妈睡着后,我们先简单看下,直接调用Python原生字典的示例:
代码
>>> profdict = dict(name = 'Carl_奕然') >>> profdict {'name': 'Carl_奕然'} >>> profdict['name'] 'Carl_奕然'
截图
那么,能不能直接输入 profdict.name 就可以显示结果呢??
这必须的,这就是我们今天分享的知识点:munch。
2.1 安装与确认
2.1.1 安装
万事第一步,就是安装。
我们就直接pip install
pip install munch
当然,可以不用安装,直接引用万能库。
我这里,还是需要按规矩办事,所以就直接install一下
安装完如下图:
2.1.2 确认
安装完,我们小试一下munch~
验证munch的Munch()类是否继承自原生字典。
代码
# -*- coding:utf-8 -*- # @Time : 2021-08-15 # @Author : carl_DJ from munch import Munch profdict = Munch() print(f'{isinstance(profdict,dict)}')
结果
2.2 操作
2.3.1 兼容字典操作
因为Munch继承自dict,所有dict的各种操作也适用于Munch对象。
首先 增删改查走一个:
为了能更直观的展示结果,小鱼就用Python自带的IDEL来编写
# -*- coding:utf-8 -*- # @Time : 2021-08-15 # @Author : carl_DJ >>> from munch import Munch >>> profdict = Munch() >>> profdict.name = 'Carl_奕然' >>> profdict.age = '22' >>> profdict Munch({'name': 'Carl_奕然', 'age': '22'}) #增加性别元素 >>> profdict['gender'] = 'male' >>> profdict Munch({'name': 'Carl_奕然', 'age': '22', 'gender': 'male'}) #修改性别元素,有男→女 >>> profdict['gender'] = 'female' >>> profdict Munch({'name': 'Carl_奕然', 'age': '22', 'gender': 'female'}) #删除元素 ##pop方法删除 >>> profdict.pop('age') '22' >>> profdict Munch({'name': 'Carl_奕然', 'gender': 'female'}) ## del方法删除 >>> del profdict['gender'] >>> profdict Munch({'name': 'Carl_奕然'}
其次,展示一些常用方法:
#获取字典的key >>> profdict.keys() dict_keys(['name']) #获取字典的Value >>> profdict.values() dict_values(['Carl_奕然']) #获取name >>> profdict.get('name') 'Carl_奕然' >>> profdict.setdefault('age','22') '22' >>> profdict Munch({'name': 'Carl_奕然', 'age': '22'})
2.3.2 设置返回默认值
我们都知道,访问字典中的不存在的key时,会报 KeyError的错误:
示例
>>> profdict = {} >>> profdict['class'] Traceback (most recent call last): File "<pyshell#23>", line 1, in <module> profdict['class'] KeyError: 'class'
对于这种情况,我们会使用两种方法来规避:
get规避示例:
>>> profdict.get('class','undefined') 'undefined'
DefaultMunch 规避示例:
>>> from munch import DefaultMunch >>> profdict = DefaultMunch("undefined", {"name": "Carl_奕然"}) >>> profdict DefaultMunch('undefined', {'name': 'Carl_奕然'}) >>> profdict.age 'undefined' >>> profdict DefaultMunch('undefined', {'name': 'Carl_奕然'})
DefaultMunch的好处就是,在你访问不存在的key时,给你返回一个设定好的默认值,
如上面代码的 undefined。
2.3.3 自动创建Key
DefaultMunch仅当你访问不存在的Key时返回一个默认值,但是这个行为并不会修改原munch对象的任何内容。
如果想先修改原来munch的内容,可以尝试DefaultFactoryMunch,在这传入一个工厂函数。
示例
>>> from munch import DefaultFactoryMunch >>> profdict = DefaultFactoryMunch(list, name='Carl_奕然') >>> profdict DefaultFactoryMunch(list, {'name': 'Carl_奕然'}) >>> >>> profdict.brothers [] >>> profdict DefaultFactoryMunch(list, {'name': 'Carl_奕然', 'brothers': []})
2.3.4 序列化
Munch还支持序列化为JSON或者YAML格式的字符串对象。
转换成JSON
>>> from munch import Munch >>> munch_odt = Munch(foo=Munch(lol=True), bar=200, msg='hello,Carl') >>> >>> import json >>> json.dumps(munch_odt) '{"foo": {"lol": true}, "bar": 200, "msg": "hello,Carl"}'
转换成YAML
>>> from munch import Munch >>> munch_odt = Munch(foo=Munch(lol=True), bar=200, msg='hello,Carl') >>> >>> import yaml >>> yaml.dump(munch_odt) '!munch.Munch\nbar: 200\nfoo: !munch.Munch\n lol: true\nmsg: hello,Carl\n' >>> print(yaml.dump(munch_odt)) !munch.Munch bar: 200 foo: !munch.Munch lol: true msg: hello,Carl #使用safe_dump 去掉 !munch.Munch >>> print(yaml.safe_dump(munch_odt)) bar: 200 foo: lol: true msg: hello,Carl
这里,我们使用了safe_dump 把 !munch.Munch 给去掉。
3、总结
看到这里,今天的分享,又要告一段落了…
小屌丝:鱼哥,鱼哥,先等下,我发现,你今天写的很规范,很正经,没有开车。
小鱼:… 你… 我… 你… 我每一篇写的都很正经的好吧。
小屌丝:拉倒吧,就你,我还不知道, 都是二档起步的人…
小鱼:我…你… 你…
小鱼友情提醒:七夕已过,注意休息。
关于更多的munch内容,请移步官网:https://pypi.org/search/?q=munch