
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..."
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月29日 10时24分35秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux、Windows渗透测试靶场手动搭建实战(附靶场安装包与安装脚本)
2023-02-02
linux一切皆文件之Unix domain socket描述符(二)
2023-02-02
linux上修改容器网卡docker0为固定ip
2023-02-02
Linux上安装TeamViewer
2023-02-02
linux上调用接口命令
2023-02-02
Linux上运行Nacos服务出现报错及解决方法
2023-02-02
Linux下 RabbitMQ的安装与配置
2023-02-02
linux下 安装php的gettext模块
2023-02-02
Linux下Apache
2023-02-02
linux下awk命令用法,打印符合条件的列,求和
2023-02-02
linux下bob2木马查杀的经历
2023-02-02
linux下can调试工具libsocketcan、canutils安装与使用
2023-02-02
linux下echo命令详解(转)
2023-02-02
linux下rename用法--批量重命名
2023-02-02
linux下sed命令用法
2023-02-02
linux下subversion server安装手册
2023-02-02
linux下svn修改用户名和密码
2023-02-02
linux下svn命令使用大全
2023-02-02