python 数据结构之字典

python 常见的数据结构之一就是字典,关于遍历,插入,删除。常见的比如使用items(),update,pop等。索引的时候使用keys()。

>>> dic = dict(key='value')
>>> dic
{'key': 'value'}
>>> dic['key']
'value'
>>> dic.get('key')
'value'

过去的用法大都是使用[‘key’]或者get的形式去访问,因为get对于不存在的key可以返回None,但是如果一个字典不存在一个key使用[‘key’]则会提示key错误的问题.因此如果要使用传统的方法去范围字典,建议使用dict.get(‘key’)的形式

>>> dic['name']
Traceback (most recent call last):
  File "<input>", line 1, in <module>
KeyError: 'name'
>>> dic.get('name')

那如果能使用对象.属性的方式去访问,便可以大大简化访问的繁文缛节了。下面介绍一下字典操作和访问的一个库much

1.环境安装

python -m pip install munch

2.范例使用

使用instance判断实例类型和字典访问

from munch import Munch

dicMu = Munch()
print(isinstance(dicMu , dict))

dicMu .key = 'value'
print(f'输出dic["key"]形式: {dicMu ["key"]}')
print(f'输出dic.get("key")形式: {dicMu .get("key")}')
print(f'输出dic.key形式: {dicMu .key}')

输出如下:

True
输出dic["key"]形式: value
输出dic.get("key")形式: value
输出dic.key形式: value

因为Munch类继承于dict,因此子类Munch适用于父类dict对字典的常规操作。涉及增删改查都可以使用

from munch import Munch

dicMu = Munch()
dicMu.name = 'zhiyu'
dicMu['age'] = 'NN'
print(f'原始字典: {dicMu}')

# 增加元素
dicMu['gender'] = 'big man'
dicMu.name2 = 'zhiyu2'
print(f'字典插入数据: {dicMu}')

# 修改元素
dicMu['gender'] = 'modifyMan'
dicMu.name2 = 'modifyName'
print(f'字典修改数据: {dicMu}')

# 删除元素
dicMu.pop('gender')
print(f'字典删除数据: {dicMu}')

输出为:

原始字典: Munch({'name': 'zhiyu', 'age': 'NN'})
字典插入数据: Munch({'name': 'zhiyu', 'age': 'NN', 'gender': 'big man', 'name2': 'zhiyu2'})
字典修改数据: Munch({'name': 'zhiyu', 'age': 'NN', 'gender': 'modifyMan', 'name2': 'modifyName'})
字典删除数据: Munch({'name': 'zhiyu', 'age': 'NN', 'name2': 'modifyName'})

当然删除数据还可以使用

del dicMu['name2']
del dicMu.name2

另外对于字典的一些其他方法也是适用的,比如遍历方法dicMu.items(),dicMu.keys(),dicMu.vaules(),dicMu.setdefault(‘gender’, ‘male’)等也同样适用。

3. 设置默认值

from munch import Munch

dicMu = Munch()
dicMu.name = 'zhiyu'
dicMu['age'] = 'NN'
print(f'原始字典: {dicMu}')

print(dicMu.get('gender'))
print(dicMu.get('gender'), 'none data')
dicMu.setdefault('gender', 'male')
print(dicMu.get('gender'))

还有一种方法就是使用Munch中的DefaultMunch,功能类似setdefault在访问不存在的key时,返回一个指定的默认值。且可以指定多个数据的默认值,而不用像使用get一样,每个都设置一下,或者使用setdefault进行设置

from munch import DefaultMunch

dicMu = DefaultMunch('undefined', {'name':'zhiyu'})
print(dicMu)
print(dicMu.age)
print(dicMu.gender)

输出为:

DefaultMunch('undefined', {'name': 'zhiyu'})
undefined
undefined

上面这个是访问不存在的key时,返回给指定的提示不存在数据,如没有age,访问age时提示undefined。还有一种情况是如果没有这个key,则给字典新增一个key值。即访问Munch对象不存在的key时,自动触发给Munch对象新增一个key并且为其设置一个默认值,这个时候需要使用到DefaultFactoryMunch函数。

from munch import DefaultFactoryMunch

dicMu1 = DefaultFactoryMunch(list, {'name':'zhiyu'})
print(dicMu1.age)
dicMu2 = DefaultFactoryMunch(dict, {'name':'zhiyu'})
print(dicMu2.age)
dicMu3 = DefaultFactoryMunch(tuple, {'name':'zhiyu'})
print(dicMu3.age)
print(dicMu3)
dicMu3.age = 'NN'
print(dicMu3)
dicMu4 = DefaultFactoryMunch('undefined', {'name':'zhiyu'})
DefaultFactoryMunch(tuple, {'name': 'zhiyu', 'age': 'NN'})
print(dicMu4.age)

输出如下:

[]
{}
Traceback (most recent call last):
DefaultFactoryMunch(tuple, {'name': 'zhiyu', 'age': ()})
  File "D:\python37\lib\site-packages\munch\__init__.py", line 103, in __getattr__
    return object.__getattribute__(self, k)
AttributeError: 'DefaultFactoryMunch' object has no attribute 'age'
   self[k] = self.default_factory()
TypeError: 'str' object is not callable

发现如果使用DefaultFactoryMunch则不能使用 not callable对象。

4. 序列化支持

Munch支持系列化为Json或者yaml格式的字符串转换成Json对象。

from munch import Munch
import json
import yaml


munch_obj = Munch(foo=Munch(lol=True), bar=100, msg='hello')
print(json.dumps(munch_obj))

munch_obj = Munch(foo=Munch(lol=True), bar=100, msg='hello')
print(yaml.dump(munch_obj))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值