大家早上好
今天要给大家分享的是一个python的库
要不是周末在写工蜂的API的时候突然需要用到addict这个库
我都差点忘了我写过的一个名为entity_addict的库
entity_addict是扩展了addict的部分功能之前是本想合并到addict上面的
但是作者建议是单独作为一个新的python包
从而保持addict的简单和纯粹
(addict核心代码不超过200行)
addict
在讲entity_addict之前我们来看看addict
2.1k的star就可见它的优秀
addict的用法也简单,把一个字典传递给Dict对象后就可以像对象一样的去操作字典了
>>> from addict import Dict
>>> body = Dict()
>>> body.query.filtered.query.match.description = 'addictive'
>>> body.query.filtered.filter.term.created_by = 'Mats'
body = {
'query': {
'filtered': {
'query': {
'match': {'description': 'addictive'}
},
'filter': {
'term': {'created_by': 'Mats'}
}
}
}
}
>>> from addict import Dict
>>> mapping = Dict()
>>> mapping.a.b.c.d.e = 2
>>> mapping
{'a': {'b': {'c': {'d': {'e': 2}}}}}
从上面的例子就可以看到,真好用!
entity_addict
现在我们再来看entity_addict
from entity_addict import entity_addict
@entity_addict
def get_dict_data_a():
return {"key_name": "value"}
data = get_dict_data_a()
print(data.key_name)
@entity_addict
def get_dict_data_b():
return [{"key_name": "value"}]
for data in get_dict_data_b():
print(data.key_name)
@entity_addict
def get_dict_data_c():
return [
{"key_name": "value"},
{"key": [{"sub_key1": 1}, {"sub_key2": 2}]}
]
data = get_dict_data_c()
print(data[1].key[1].sub_key2)
addict它不能支持列表中的字典,也不能支持多层嵌套中的列表字典
我们可以在日常工作中很多地方都能用到addict或者entity_addict毕竟只要跟字典打交道都可以用的上它
赶紧收藏起来把
好了今天的分享就到这了
我们下次再见