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


目录
相关文章
|
10天前
|
机器学习/深度学习 存储 数据挖掘
Python图像处理实用指南:PIL库的多样化应用
本文介绍Python中PIL库在图像处理中的多样化应用,涵盖裁剪、调整大小、旋转、模糊、锐化、亮度和对比度调整、翻转、压缩及添加滤镜等操作。通过具体代码示例,展示如何轻松实现这些功能,帮助读者掌握高效图像处理技术,适用于图片美化、数据分析及机器学习等领域。
49 20
|
1月前
|
XML JSON 数据库
Python的标准库
Python的标准库
173 77
|
19天前
|
JSON 监控 安全
深入理解 Python 的 eval() 函数与空全局字典 {}
`eval()` 函数在 Python 中能将字符串解析为代码并执行,但伴随安全风险,尤其在处理不受信任的输入时。传递空全局字典 {} 可限制其访问内置对象,但仍存隐患。建议通过限制函数和变量、使用沙箱环境、避免复杂表达式、验证输入等提高安全性。更推荐使用 `ast.literal_eval()`、自定义解析器或 JSON 解析等替代方案,以确保代码安全性和可靠性。
28 2
|
1月前
|
XML JSON 数据库
Python的标准库
Python的标准库
56 11
|
2月前
|
人工智能 API 开发工具
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
吴恩达发布的开源Python库aisuite,提供了一个统一的接口来调用多个大型语言模型(LLM)服务。支持包括OpenAI、Anthropic、Azure等在内的11个模型平台,简化了多模型管理和测试的工作,促进了人工智能技术的应用和发展。
162 1
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
|
1月前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
83 8
|
1月前
|
安全 API 文件存储
Yagmail邮件发送库:如何用Python实现自动化邮件营销?
本文详细介绍了如何使用Yagmail库实现自动化邮件营销。Yagmail是一个简洁强大的Python库,能简化邮件发送流程,支持文本、HTML邮件及附件发送,适用于数字营销场景。文章涵盖了Yagmail的基本使用、高级功能、案例分析及最佳实践,帮助读者轻松上手。
53 4
|
2月前
|
XML JSON API
如何使用Python将字典转换为XML
本文介绍了如何使用Python中的`xml.etree.ElementTree`库将字典数据结构转换为XML格式。通过定义递归函数处理字典到XML元素的转换,生成符合标准的XML文档,适用于与旧系统交互或需支持复杂文档结构的场景。示例代码展示了将一个简单字典转换为XML的具体实现过程。
26 1
|
3月前
|
Python
pip批量安装Python库 requirement.txt 离线环境无互联网环境下pip安装Python库
pip批量安装Python库 requirement.txt 离线环境无互联网环境下pip安装Python库
199 3
|
7月前
|
开发工具 git Python
安装和使用`libnum`是一个用于数字理论函数的Python库
【6月更文挑战第19天】`libnum`是Python的数字理论函数库。安装可通过`git clone`,进入目录后运行`python setup.py install`,也可用`pip install libnum`。示例:使用`int_to_hex`将十进制数42转换为十六进制字符串&#39;2a&#39;。注意,信息可能已过时,应查最新文档以确保准确性。如遇问题,参考GitHub仓库或寻求社区帮助。
144 1