Python3:Python原生字典终结者,这个库要逆天吗!!!

简介: Python3:Python原生字典终结者,这个库要逆天吗!!!

1、引言


小屌丝:鱼哥,这七夕过完了,周末也过完了, 你这两天没少忙活吧!!

小鱼:怎么叫没少忙活? 你这话里有话啊!

小屌丝:我嘴笨,不会用高大尚的词汇来描述~ ~

小鱼:你可以 gu wen 了…

小屌丝:别啊,我这还有个问题要问你呢 。

小鱼:不会,不了解,不知道!!

小屌丝:是妹子让我问…关于python原生字典的知识…

小鱼:妹子啊,妹子不妹子的无所谓,我就是单纯的分享知识…

小屌丝:我信你个鬼…你个糟老头子,坏的狠~ ~

小鱼:不信就不信,妹子信就行。


今天我们来分享一下, Python原生字典的终结者,也是一款黑科库,

自动我用了这个库,从此告别双手 原生字典。


2、munch库介绍


在介绍munch库之前,我们先唠叨一下Python字典,

字典是Python中基础的数据结构之一,使用字典,必须要简单粗暴,

但是,即使这么一个无欲无求,与世无争的数据结构,仍然有不少人"很隔路",看不惯它。


解释一下"隔路":

隶属东北话,东北方言,

意思:爱搞特殊,与众不同,不合群…


王大爷:这一局,我认输。

王大妈:这仅仅代表他自己,我表示不服。

小鱼:这都凌晨一点了,大爷大妈,还不睡呢!!!


待王大爷和大妈睡着后,我们先简单看下,直接调用Python原生字典的示例:


代码


>>> profdict = dict(name = 'Carl_奕然')
>>> profdict
{'name': 'Carl_奕然'}
>>> profdict['name']
'Carl_奕然'

截图

image.png

那么,能不能直接输入 profdict.name 就可以显示结果呢??

这必须的,这就是我们今天分享的知识点:munch。


2.1 安装与确认


2.1.1 安装


万事第一步,就是安装。

我们就直接pip install


pip install munch


当然,可以不用安装,直接引用万能库。

我这里,还是需要按规矩办事,所以就直接install一下


安装完如下图:


image.png

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)}')

结果


image.png


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


目录
相关文章
|
4天前
|
Python
使用Python的openpyxl库
【5月更文挑战第17天】使用Python的openpyxl库
14 2
|
23小时前
|
机器学习/深度学习 算法 前端开发
2024年8个可以提高数据科学工作效率并节省宝贵时间的Python库,2024年最新记得把每一次面试当做经验积累
2024年8个可以提高数据科学工作效率并节省宝贵时间的Python库,2024年最新记得把每一次面试当做经验积累
2024年8个可以提高数据科学工作效率并节省宝贵时间的Python库,2024年最新记得把每一次面试当做经验积累
|
1天前
|
数据采集 机器学习/深度学习 人工智能
2024最新版Python安装教程,适合新手,赶快收藏!_python3最新版2024
2024最新版Python安装教程,适合新手,赶快收藏!_python3最新版2024
|
1天前
|
数据采集 机器学习/深度学习 人工智能
2024最新版Python安装教程,适合新手,赶快收藏!_python3最新版2024(3)
2024最新版Python安装教程,适合新手,赶快收藏!_python3最新版2024(3)
|
1天前
|
开发工具 Python
Python列表和字典前面为什么要加星号( )?_python一个 代表列表
Python列表和字典前面为什么要加星号( )?_python一个 代表列表
|
3天前
|
网络协议 数据处理 调度
深入探索Python异步编程:asyncio库的应用与实践
在现代软件开发中,异步编程已成为处理并发和I/O密集型任务的重要策略。本文将带您深入探索Python的asyncio库,解析其背后的设计原理,并通过实例展示如何在实际项目中应用asyncio实现高效的异步编程。我们不仅会探讨asyncio的基本用法,还会分析其性能优势,并探讨其与其他并发模型的比较。此外,文章还将涵盖asyncio在Web开发、网络编程和数据处理等场景中的应用案例,帮助您更好地理解并掌握这一强大的异步编程工具。
|
3天前
|
存储 索引 Python
【python学习】列表、元组、字典、集合,秋招是不是得到处面试
【python学习】列表、元组、字典、集合,秋招是不是得到处面试
|
3天前
|
Python
【Python3 查询手册学习】,完整版PDF开放下载_python速查手册·模块卷(全彩版) pdf(1)
【Python3 查询手册学习】,完整版PDF开放下载_python速查手册·模块卷(全彩版) pdf(1)
|
4天前
|
程序员 Python
tesseract库的安装与使用及在python中使用,Python程序员秋招三面蚂蚁金服
tesseract库的安装与使用及在python中使用,Python程序员秋招三面蚂蚁金服
|
4天前
|
Python
Python基础教程: math库常用函数(1),Python这些高端技术只有你还不知道
Python基础教程: math库常用函数(1),Python这些高端技术只有你还不知道