Python的addict模块
发布日期:2021-05-20 07:39:20 浏览次数:23 分类:精选文章

本文共 1699 字,大约阅读时间需要 5 分钟。

Addict — 一个简化嵌套字典操作的Python模块

现在开发人员可以轻松处理嵌套字典结构。助手可以通过属性访问和设置值,你无需编写繁琐的嵌套字典即可完成操作。

安装方式

通过以下命令可以轻松安装:

pip install addict

或者使用conde:

conda install addict -c conda-forge

使用说明

Importer Dict模块:

from addict import Dict

创建并初始化一个字典对象:

mapping = Dict()

对嵌套结构进行操作:

mapping.a.b.c.d.e = 2

即可得到:

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

逆向兼容性

Iterating初始化值:

mapping = {'a': [{'b':3}, {'b':3}]}

将字典克隆为addict的实例:

dictionary = Dict(mapping)

此时:

mapping['a'] is dictionary['a'] -> False
dictionary.a[0].b -> 3

但:

a = Dict()b = [1,2,3]a.b = ba.b is b -> True

注意事项

  • 不允许修改即字典的原属性(如keys)。
  • 同时支持属性和索引访问,操作方式灵活。
addicted.a.b.c.d.e = 2{    2: [1,2,3],    'a': {'b': {'c': {'d': {'e':2}}}}}

混合使用两种操作方式:

addicted.a.b['c'].d.e2

递归转换字典

通过staticmethod to_dict()生成安全字典副本:

regular_dict = my_addict.to_dict()# regular_dict是一个普通字典

应用场景

definitely是处理多级数据最方便的工具。比如统计多层数据:

data = [ ... ] # 多层数据结构counter = Dict()for row in data:    born = row['born']    gender = row['gender']    eyes = row['eyes']    counter[born][gender][eyes] +=1

生成类似结果:

{    1980: {'M': {'blue':1, 'green':3}, 'F':...},     1981: {'M':..., 'F':...}}

更新方式

两种方式都能实现完全更新:

d = {'a': {'b':3}}d.update({'a': {'c':4}})D = Dict({'a': {'b':3}})D.update({'a': {'c':4}})# 结果为 {'a': {'b':3, 'c':4}}

适用场景

对于那些经常需要写出多层查询的elasticsearch查询来说,addict简化了编码过程。

优势

addict保留了Python字典的所有优点,但提供了更灵活的值获取和设置方式。它可以方便地用于JSON序列化,并且通过to_dict()方法即可安全地共享给其他模块。

开发支持与测试

我们欢迎任何问题和pull请求。测试运行在TravisCI和coveralls上,确保每次提交都能通过测试。

测试文件在test_addict.py中,使用unittest框架:

python -m unittest -v test_addict

除此之外,我们还吸引了很多开发者的关注,得到了诸多nice的反馈:

@spiritsack - "这颗小石子拨动了我的isnan山谷。"@Hacker News用户 - "...目的本身就是不pythonic..."
上一篇:Linux下查看隐藏文件命令
下一篇:Python的一个报错——OSError: [Errno 22] Invalid argument

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月29日 10时24分35秒