addict

1、功能

addict模块可以构造嵌套字典,或者解字典。

2、安装

pip install addict

3、构造一个嵌套字典

代码:

from addict import Dict
mapping = Dict()
mapping.a.b.c.d.e = 2
print(mapping)
  • 首先实例化Dict()对象。
  • 然后进行嵌套,比如上面是最外层到最内层嵌套a b c d e。
  • 最后赋值2,是给最后一个key,也就是e进行赋值为2。

得到的输出为:

{'a': {'b': {'c': {'d': {'e': 2}}}}}

4、根据结构构造字典

body = {
    'query': {
        'filtered': {
            'query': {
                'match': {'description': 'addictive'}
            },
            'filter': {
                'term': {'created_by': 'Mats'}
            }
        }
    }
}
  • 捋一捋关系,query嵌套了filtered。
  • filtered内的query和filter是平行关系。
  • 内层的query包含match;filter包含term。
  • match和term又有各自的嵌套字典。

代码如下:

>>> from addict import Dict
>>> mapping = Dict()
# 构造filtered的第一个分支,query
>>> mapping.query.filtered.query.match.description = 'addictive'
# 构造filtered的第二个分支,filter
>>> mapping.query.filtered.filter.term.created_by = 'Mats'

查看mapping输出的结果:

{'query': {'filtered': {'query': {'match': {'description': 'addictive'}}, 'filter': {'term': {'created_by': 'Mats'}}}}}

5、Dict(dict)操作

可以对一个已经存在的字典进行Dict()操作
但得到的对象的值和原有的字典相等,但并不是同一个内存地址

代码如下:

>>> from addict import Dict
>>> dictt = {'query': {'filtered': {'query': {'match': {'description': 'addictive'}}, 'filter': {'term': {'created_by': 'Mats'}}}}}
>>> mapping = Dict(dictt)
>>> mapping
{'query': {'filtered': {'query': {'match': {'description': 'addictive'}}, 'filter': {'term': {'created_by': 'Mats'}}}}}
>>> dictt
{'query': {'filtered': {'query': {'match': {'description': 'addictive'}}, 'filter': {'term': {'created_by': 'Mats'}}}}}

使用==比较值,使用is比较内存地址:

>>> mapping == dictt
True
>>> mapping is dictt
False

6、解嵌套字典

  • 使用 object.key 的方式
  • 使用 dict[key] 的方式

object.key的方式代码如下:

>>> mapping.query
{'filtered': {'query': {'match': {'description': 'addictive'}}, 'filter': {'term': {'created_by': 'Mats'}}}}
>>> mapping.query.filtered
{'query': {'match': {'description': 'addictive'}}, 'filter': {'term': {'created_by': 'Mats'}}}
  • mapping.query,取出query的value
  • mapping.query,filtered,取出query嵌套的filtered的value

dict[key]的方式代码如下:

>>> mapping['query']
{'filtered': {'query': {'match': {'description': 'addictive'}}, 'filter': {'term': {'created_by': 'Mats'}}}}