当前位置: 首页 > 后端技术 > Python

Python原生字典的终结?这座图书馆将逆天改命

时间:2023-03-26 13:53:22 Python

字典是Python中的基本数据结构之一。字典的使用可以说是非常简单粗暴,但即便是这样毫无争议的数据结构,依然有不少人“看不懂”。或许你不这么认为,但我相信看完这篇文章,你会和我一样开始对原生词典产生偏见。让我给你一个简单的例子。当你想访问字典中的键时,你需要使用字典特定的访问方法,这需要你键入一对方括号和一对引号>>>profile=dict(name="iswbm")>>>profile{'name':'iswbm'}>>>profile["name"]'iswbm'开始觉得受不了了?如果它可以像调用对象属性一样使用。访问key就好了,可以省去很多多余的键盘敲击,就像这样>>>profile.name'iswbm'是的,今天这篇文章就是给大家分享一个可以直接使用的黑魔法库。访问和操作词典——munch。1、安装方法使用如下命令安装$python-mpipinstallmunch2。简单示例munch有一个Munch类,它继承自原生字典,可以使用isinstance>>>frommunchimportMunch>>>profile=Munch()>>>isinstance(profile,dict)True>>>和实现点的分配和访问,profile.name和profile['name']是等价的>>>profile.name="iswbm">>>profile.age=18>>>profileMunch({'name':'iswbm','age':18})>>>>>>profile.name'iswbm'>>>profile["name"]'iswbm'3.兼容字典本身的所有操作。Munch继承自dict,对dict的操作同样适用于Munch对象。您不妨再次验证一下。>>profileMunch({'name':'iswbm','age':18,'gender':'male'})#修改元素>>>profile["gender"]="female">>>profileMunch({'name':'iswbm','age':18,'gender':'female'})#deleteelement>>>profile.pop("gender")'female'>>>profileMunch({'name':'iswbm','年龄':18})>>>>>>delprofile["age"]>>>profileMunch({'name':'iswbm'})此外:一些常用方法>>>profile.keys()dict_keys(['name'])>>>>>>profile.values()dict_values(['iswbm'])>>>>>>profile.get('name')'iswbm'>>>profile.setdefault('gender','male')'male'>>>profileMunch({'name':'iswbm','gender':'male'})4.设置返回默认值当访问字典中不存在的key时,会报KeyError错误>>>profile={}>>>profile["name"]Traceback(mostrecentcalllast):File"",line1,inKeyError:'name'对于这种情况,我们通常使用get来规避>>>profile={}>>>profile.get("name","undefined")'undefined'当然你仍然可以在munch中使用这个,但是有一个更好的方法:使用DefaultMunch,当你访问一个不存在的键,它将返回一个设置的默认值>>>frommunchimportDefaultMunch>>>profile=DefaultMunch("undefined",{"name":"iswbm"})>>>profileDefaultMunch('undefined',{'name':'iswbm'})>>>profile.age'undefined'>>>profileDefaultMunch('undefined',{'name':'iswbm'})5.工厂函数自动创建密钥上面使用的DefaultMunch仅在访问不存在的键时返回默认值,但此行为不会修改原始munch对象的任何内容。如果你想访问一个不存在的key,它会自动触发添加你想访问的新的munchkey,并为其设置一个默认值,你可以试试DefaultFactoryMunch传入一个工厂函数。>>>frommunchimportDefaultFactoryMunch>>>profile=DefaultFactoryMunch(list,name='iswbm')>>>profileDefaultFactoryMunch(list,{'name':'iswbm'})>>>>>>配置文件。brothers[]>>>profileDefaultFactoryMunch(list,{'name':'iswbm','brothers':[]})6.序列化支持Munch支持序列化成JSON或YAML字符串对象成JSON>>>frommunchimportMunch>>>munch_obj=Munch(foo=Munch(lol=True),bar=100,msg='hello')>>>>>>importjson>>>json.dumps(munch_obj)'{"foo":{"lol":true},"bar":100,"msg":"hello"}'intoYAML>>>frommunchimportMunch>>>munch_obj=Munch(foo=Munch(lol=True),bar=100,msg='hello')>>>importyaml>>>yaml.dump(munch_obj)'!munch.Munch\nbar:100\nfoo:!munch.Munch\nlol:true\nmsg:hello\n'>>>>>>打印(yaml.dump(munch_obj))!munch.Munchbar:100foo:!munch.Munchlol:truemsg:hello>>>建议使用safe_dump去除!munch.Munch>>>print(yaml.safe_dump(munch_obj))bar:100foo:lol:truemsg:hello以上就是完整解决方法使用munch,替换原生字典没问题,munch的进一步封装让数据的访问和操作更加Python化。我希望有一天这个功能可以在原生词典中体现出来。最近整理了上百G的Python学习资料,包括电子书和新手教程,源码等,免费分享给大家!想上“Python编程学习圈”,发“J”免费领取

猜你喜欢