暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DotMap 操作原生字典类型转为类对象操作的库

小儿来一壶枸杞酒泡茶 2021-06-05
3077

DotMap 操作字典类型库介绍

munch 也是一个提供DotMap的字典的库的操作。有兴趣可以自行百度,这个其实和DotMap一样的功能!


DotMap 这个库其实也是一个类似munch的处理机制。其实关于字典,我们的知道还有一种定义字典的方式就是:

1 初期认识的字典定义方式

首先字典定义的方式的几种:

第1种:

dict(name='xiaozhong', sex="男")

复制

第二钟:

{"name":'xiaozhong', "sex":"男"}

复制

第三种(列表):

dict([["name", "xiaozhong"], ["sex", "男"]])

复制

第四种(元祖):

dict([("name", "xiaozhong"), ("sex", "男")])

复制

2:利用namedtuple封装为类的方式

第五种(namedtuple封装):


from collections import namedtuple
# 定义namedtuple类型User,并包含name,sex属性。
User = namedtuple('User', ['name', 'sex'])
# 创建一个User对象
user = User(name='xiaozhonhg', sex='男')
print(type(user))
# 通过list来创建一个User对象,需使用"_make"方法
user = User._make(['xiaozhonhg', '男'])
print(type(user))
# 把一个对象转为字典类型
print(user._asdict())
# 访问内容
print(user._asdict()['name'])

复制

输出结果为:

<class '__main__.User'>
<class '__main__.User'>
OrderedDict([('name', 'xiaozhonhg'), ('sex', '男')])
xiaozhonhg

复制

3:DotMap主角方式

上面的以前我所知道的几种方式,接下来的有新的一个库,它其实可以很用用到我们的JSON的反序列话上,这种对我们的来说是比较有溢出的。也是这里介绍的这个DotMap。

官网的地址:https://github.com/drgrib/dotmap

安装:

pip3 install dotmap
更新
pip3 install --upgrade dotmap

复制

3.1 简单的使用


from dotmap import DotMap
m = DotMap()
m.name = 'xiaozhong'
m.sex = '男'
print('类型:',type(m))
print("使用.访问元素",'--->'*3)
print('你好:' + m.name)
print('性别:',m.sex)
print("使用[""]访问元素",'--->'*3)
print('你好:' + m['name'])
print('性别:',m['sex'])

#另一种初始化方式:
m2 = DotMap(name='xiaozhong2222',sex="女")
# 或者 还可以传入已有的字典:
# m2 = DotMap({"name":'xiaozhong', "sex":"男"})
print("使用.访问元素",'--->'*3)
print('你好:' + m2.name)
print('性别:',m2.sex)
print("使用[""]访问元素",'--->'*3)
print('你好:' + m2['name'])
print('性别:',m2['sex'])


复制

输出结果:

类型:<class 'dotmap.DotMap'>
使用.访问元素 --->--->--->
你好:xiaozhong
性别:男
使用[]访问元素 --->--->--->
你好:xiaozhong
性别:男
使用.访问元素 --->--->--->
你好:xiaozhong2222
性别:女
使用[]访问元素 --->--->--->
你好:xiaozhong2222
性别:女

复制

3.2 对象转字典,格式化输出JSON:

from dotmap import DotMap
m = DotMap()

m.people.john.age = 32
m.people.john.job = 'programmer'
m.people.mary.age = 24
m.people.mary.job = 'designer'
m.people.dave.age = 55
m.people.dave.job = 'manager'
print("---->"*3)
m.xiaoming.job = '111111111111'
m.xiaoming.name = 'xiaozhong'
m.xiaohuang.job = '2222222222'

print('对象转字典:',m.toDict())
print('输出JSON:')
m.pprint()
# m.pprint(pformat='json')


复制

输出结果:

---->---->---->
对象转字典: {'people': {'john': {'age': 32, 'job': 'programmer'}, 'mary': {'age': 24, 'job': 'designer'}, 'dave': {'age': 55, 'job': 'manager'}}, 'xiaoming': {'job': '111111111111', 'name': 'xiaozhong'}, 'xiaohuang': {'job': '2222222222'}}
输出JSON:
{'people': {'dave': {'age': 55, 'job': 'manager'},
'john': {'age': 32, 'job': 'programmer'},
'mary': {'age': 24, 'job': 'designer'}},
'xiaohuang': {'job': '2222222222'},
'xiaoming': {'job': '111111111111', 'name': 'xiaozhong'}}

复制

4:JSON 反序列化DotMap

请求的接口是:

from dotmap import DotMap
m = DotMap()
import requests
m=DotMap(requests.post('http://127.0.0.1:20219/xxx/xxxxx/editOrAddChatbot').json())
print(m)
print(m.xiaoming.job)
print(m.xiaohuang.job)
print(m.xiaohuang.name)
m.pprint(pformat='json')

复制

输出结果为:

DotMap(people=DotMap(dave=DotMap(age=55, job='manager'), john=DotMap(age=32, job='programmer'), mary=DotMap(age=24, job='designer')), xiaohuang=DotMap(job='2222222222'), xiaoming=DotMap(job='111111111111', name='xiaozhong'))
111111111111
2222222222
DotMap()
{
"people": {
"dave": {
"age": 55,
"job": "manager"
},
"john": {
"age": 32,
"job": "programmer"
},
"mary": {
"age": 24,
"job": "designer"
}
},
"xiaohuang": {
"job": "2222222222",
"name": {}
},
"xiaoming": {
"job": "111111111111",
"name": "xiaozhong"
}
}

复制

到此结束!水文一篇!仅作为个人的笔记,和备忘记录!

个人其他博客地址

简书:https://www.jianshu.com/u/d6960089b087

掘金:https://juejin.cn/user/2963939079225608

小钟同学 | 文 【原创】| QQ:308711822

  • 1:本文相关描述主要是个人的认知和见解,如有不当之处,还望各位大佬指正。

  • 2:关于文章内容,有部分内容参考自互联网整理,如有链接会声明标注;如没有及时标注备注的链接的,如有侵权请联系,我会立即删除处理哟。


文章转载自小儿来一壶枸杞酒泡茶,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论