Python里超级好用的字典模块:Addict 模块

Python库 | addict-0.0.3.tar.gz python库。 资源全名:addict-0.0.3.tar.gz 立即下载

Addit 是一个Python模块,除了提供标准的字典语法外,Addit 生成的字典的值既可以使用属性来获取,也可以使用属性进行设置。

这意味着你不用再写这样的字典了:

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


相反,你只需编写以下三行代码就能完成目的:

body = Dict()
body.query.filtered.query.match.description = 'addictive'
body.query.filtered.filter.term.created_by = 'Mats'

1.安装

你可以通过 pip 安装:

pip install addict

或通过 conda :

conda install addict -c conda-forge

Addit 在Python2.7+和Python3上都可以运行。

2.用法

Addict 继承自字典,但在访问和设置其值方面更加灵活。使用 Addict 的字典是一种乐趣!

设置嵌套词典的项是极其舒服的:

>>> from addict import Dict
>>> mapping = Dict()
>>> mapping.a.b.c.d.e = 2
>>> mapping
{'a': {'b': {'c': {'d': {'e': 2}}}}}

如果Dict是用任何可迭代值实例化的,它将遍历并克隆这些值,然后写入到对应的属性及值中,比如:

>>> mapping = {'a': [{'b': 3}, {'b': 3}]}
>>> dictionary = Dict(mapping)
>>> dictionary.a[0].b
3

但 mapping['a'] 不再与 dictionary['a'] 相同。

>>> mapping['a'] is dictionary['a']
False

当然,此特点仅限于构造函数,而不是在使用属性或设置值时:

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

3.要牢记的事情

记住, int 不是有效的属性名,因此必须使用 get/setitem 语法 设置/获取 非字符串的 dict 键:

>>> addicted = Dict()
>>> addicted.a.b.c.d.e = 2
>>> addicted[2] = [1, 2, 3]
{2: [1, 2, 3], 'a': {'b': {'c': {'d': {'e': 2}}}}}

不过,你可以随意混合使用这两种语法:

>>> addicted.a.b['c'].d.e
2

4.属性,如键、item等

Addit 不会让你覆盖 dict 的属性,因此以下操作将不起作用:

>>> mapping = Dict()
>>> mapping.keys = 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
 File "addict/addict.py", line 53, in __setattr__
 raise AttributeError("'Dict' object attribute '%s' is read-only" % name)
AttributeError: 'Dict' object attribute 'keys' is read-only

不过,使用下面这种方式就可以:

>>> a = Dict()
>>> a['keys'] = 2
>>> a
{'keys': 2}
>>> a['keys']
2

5.默认值

对于不在字典中的键,Addit的行为如 defaultdict(Dict) ,因此丢失的键返回一个空的 Dict 而不是抛出 KeyError 如果此行为不是所需的,则可以使用以下方式恢复抛出KeyError:

>>> class DictNoDefault(Dict):
>>>   def __missing__(self, key):
>>>     raise KeyError(key)

但请注意,这样会失去速记赋值功能(addicted.a.b.c.d.e = 2 )

6.转化为普通字典

如果你觉得将 Addict 传递到其他函数或模块并不安全,请使用 to_dict() 方法,它返回会把 Addict 转化为普通字典。

>>> regular_dict = my_addict.to_dict()
>>> regular_dict.a = 2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
 AttributeError: 'dict' object has no attribute 'a'

当您希望在几行代码中创建嵌套的字典,然后将其发送到不同的函数或模块时,这非常适合:

body = Dict()
body.query.filtered.query.match.description = 'addictive'
body.query.filtered.filter.term.created_by = 'Mats'
third_party_module.search(query=body.to_dict())

7.计数

Dict 轻松访问和修改深度嵌套属性的能力使其成为计数的理想选择。使用Addict,你还可以容易允许按多个级别计数,内部使用的原理是collections.Counter 。

比如以下数据:

data = [
    {'born': 1980, 'gender': 'M', 'eyes': 'green'},
    {'born': 1980, 'gender': 'F', 'eyes': 'green'},
    {'born': 1980, 'gender': 'M', 'eyes': 'blue'},
    {'born': 1980, 'gender': 'M', 'eyes': 'green'},
    {'born': 1980, 'gender': 'M', 'eyes': 'green'},
    {'born': 1980, 'gender': 'F', 'eyes': 'blue'},
    {'born': 1981, 'gender': 'M', 'eyes': 'blue'},
    {'born': 1981, 'gender': 'F', 'eyes': 'green'},
    {'born': 1981, 'gender': 'M', 'eyes': 'blue'},
    {'born': 1981, 'gender': 'F', 'eyes': 'blue'},
    {'born': 1981, 'gender': 'M', 'eyes': 'green'},
    {'born': 1981, 'gender': 'F', 'eyes': 'blue'}
]

如果你想计算有多少人出生在born性别的gender使用eyes眼睛,你可以很容易地计算出这些信息:

counter = Dict()

for row in data:
    born = row['born']
    gender = row['gender']
    eyes = row['eyes']

    counter[born][gender][eyes] += 1 print(counter)

# 结果:{1980: {'M': {'blue': 1, 'green': 3}, 'F': {'blue': 1, 'green': 1}}, 1981: {'M': {'blue': 2, 'green': 1}, 'F': {'blue': 2, 'green': 1}}}

8.更新

普通字典的更新方式如下:

>>> d = {'a': {'b': 3}}
>>> d.update({'a': {'c': 4}})
>>> print(d)
{'a': {'c': 4}}

 addict 的更新方式如下,它会递归并实际更新嵌套的字典:

>>> D = Dict({'a': {'b': 3}})
>>> D.update({'a': {'c': 4}})
>>> print(D)
{'a': {'b': 3, 'c': 4}}

9.Addict 是怎么来的?

这个模块完全是从用Python创建Elasticsearch查询的繁琐过程中发展而来的。每当你发现自己在写了很复杂的字典逻辑时,只要记住你没有必要这样做,使用 Addict 就行。

我们的文章到此就结束啦,如果你喜欢今天的Python 实战教程,请持续关注我们!

左手Python,右手Java,升职就业不愁啦!

推荐阅读:入门: 最全的零基础学Python的问题  | 零基础学了8个月的Python  | 实战项目 |学Python就是这条捷径干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 |   从万众期待到口碑扑街!唐探3令人失望  | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影趣味:弹球游戏  | 九宫格  | 漂亮的花 | 两百行Python《天天酷跑》游戏!AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!|  再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|年度爆款文案1).卧槽!Pdf转Word用Python轻松搞定!2).学Python真香!我用100行代码做了个网站,帮人PS旅行图片,赚个鸡腿吃3).首播过亿,火爆全网,我分析了《乘风破浪的姐姐》,发现了这些秘密 4).80行代码!用Python做一个哆来A梦分身 5).你必须掌握的20个python代码,短小精悍,用处无穷 6).30个Python奇淫技巧集 7).我总结的80页《菜鸟学Python精选干货.pdf》,都是干货 8).再见Python!我要学Go了!2500字深度分析!9).发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片
点阅读原文,领AI全套资料!
华为产品安全基线 一、敏感信息安全传输 1、采用HTTPS安全协议传输 2、客户端本地保存的敏感信息,需要先加密再保存使用,不可逆支持PBKDF2(迭代10000次)加密保存,可逆支持AES256+IV保存,密钥支持可更新 二、认证鉴权 1、License中心与分析节点分布式部署,需要做用户名+口令安全认证,支持使用HTTPS安全协议。 2、客户端登录支持防暴力破解,支持验证码,多次连续尝试登陆失败后锁定账... 阅读详情

相关推荐

【2023版】基于JT808/JT1078协议的车载视频监控平台开发实战-开源架构解析

本文详细解析了基于JT808/JT1078协议的车载视频监控平台开发实战,涵盖协议核心作用、开源架构设计、开发避坑指南及二次开发建议。重点介绍了JT1078协议在音视频传输中的优化方案,以及海量位置数据存储、高可用架构等关键技术点,为开发者提供全面的实战参考。

weixin_26965807的博客 237

【学习】Python库addict,使用Dict 的类

使用 addict 库中的 Dict 类时,可以像访问对象属性一样访问字典的键值对。这在访问深层嵌套的字典时尤其方便。他只是编写代码的时候比传统字典访问要方便一些,其他的没有区别。

qq_46110320的博客 1015

SystemVue 链路预算、仿真分析步骤

使用SystemVue进行链路预算、频谱分析等,相对ADS更全面。

BeCourageable的博客 3836

python addict和字典的区别

addict中的Dict可以通过.来访问字典属性,而不必使用[key]的方式。在创建新属性时,可以用.嵌套更方便。

panpanda 247

基于ARDUINIO的5路红外循迹小车

基于ARDUINIO的5路红外循迹小车 新手抄袭了很多大神的代码。这里表示感谢。 #define STOP 0 #define FORWARD 1 #define BACKWARD 2 #define STURNLEFT 3 #define STURNRIGHT 4 #define TURNLEFT 5 #define TURNRIGHT 6 #define TURNRIGHT90 7 #define TURNLEFT90 8 int leftA_PIN = A0; int

weixin_48214416的博客 4382

2025电赛嵌入式:K210教程-如何刷固件 如何烧录代码 全网唯一

本文介绍了K210开发板的固件刷写和开发环境搭建方法。主要内容包括:1)从Sipeed官网下载合适的MaixPy固件,根据需求选择完整版或精简版;2)使用k-flash等工具烧录固件,注意区分亚博和Sipeed开发板的固件版本;3)介绍了擦除闪存的两种模式(部分擦除和完全擦除)及其应用场景;4)搭建CanMV开发环境,通过MaixPy IDE连接开发板并进行程序调试。文章还提供了常见问题的解决方法,如串口驱动安装、固件兼容性检查等,为K210开发提供了完整的入门指南。

FJN110的博客 547

Python简易字典库easydict和addict

`easydict` 允许 JavaScript 一样通过 `.` 访问值(属性)。`addict` 可以轻松地设置嵌套字典。

XerCis的博客 2534

Python爬虫-爬取汽车之家各品牌周销量榜数据,进行数据分析

本文是该专栏的第57篇,后面会持续分享python爬虫干货知识。本文中,笔者已经整理20篇汽车平台相关的爬虫项目案例。对此感兴趣的同学,可以直接翻阅查看。同样,笔者在本文中将继续以汽车之家平台为例子。基于Python爬虫,实现批量爬取“各品牌周销量榜单”的数据。废话不多说,具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。接下来,跟着笔者直接往下看正文详细内容。(附带完整代码)

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 366

addict(瘾君子)的用法

#导入需要的库 addict from addict import Dict #定义一个和mongodb相同的数据结构的字典(或者叫做dict也可以是json格式的文件) my_data = {"exstdtc": 1501603200, "infinite_oa_untoward_info": [{"untoward_name": ["798"], ...

657

Istio ICA考试之路---3-2

部署2个测试容器,分别是test和test2.test注入标签subset=v1。这里文档中省略了metadata的3行,可以从前面任意一个yaml复制粘贴过来。通过test2测试容器访问,50%概率触发500故障注入。通过test测试容器访问,20%概率触发延迟注入。发起20次请求,一共10次被500。

Q先生 728

FPGA入门200例(17):如何阅读RTL原理图(Schematic)?将Verilog代码与门级电路对应

本文针对FPGA开发新手常见误区,重点讲解了RTL原理图的重要性和阅读方法。文章指出,仅通过仿真验证代码会导致板级测试异常,而RTL原理图能直观呈现Verilog代码对应的硬件结构(门电路、寄存器、多路选择器等)。通过"识别基础元件→跟踪信号路径→验证逻辑关系"的三步法,新手可以建立代码与硬件的映射思维,排查冗余逻辑、意外锁存器等错误。文章还结合Vivado/Quartus工具操作指南和典型代码案例,帮助读者掌握从代码到硬件实现的转换过程,避免混淆RTL与门级原理图、忽略信号位宽等常见误

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 203

值得尝试的Python神器:Addict

在编程世界中,简洁易读的代码往往能提升开发效率和团队协作体验。Addict是一个小巧而强大的Python模块,它将字典的键值访问方式提升到一个新高度,让你无需再为嵌套字典的繁琐操作烦恼。 ## 项目介绍 Addict让字典的使用变得简单愉快。这个模块提供了一种新型的字典类,允许你通过属性的方式来获取和设置值,就像操作对象属性一样。这样,处理复杂的嵌套数据结构就变得更加直观了。 ```pyth...

gitblog_00092的博客 636

YOLO26涨点改进 | Conv篇/小目标改进 | AAAI 2025 FBRT-YOLO 两个轻量级FCM和MKP模块, 助力无人机航拍任务VisDrone、UAVDT和AI-TOD高效涨点

本文提出FBRT-YOLO26模型,通过引入两个轻量级模块FCM和MKP优化航拍图像检测性能。FCM模块通过特征互补映射解决小目标信息丢失问题,MKP模块利用多尺度卷积核增强目标感知能力。在VisDrone等数据集上的实验表明,该方法在精度和速度上均优于现有实时检测器。文章详细介绍了模块结构、核心代码实现及YAML配置文件修改方法,为航拍图像中的小目标检测提供了高效解决方案。该模型实现了检测精度与效率的良好平衡,具有实际应用价值。

Ai缝合怪、助力小伙伴高效发论文 369

Python的addict模块

addict is a Python module that gives you dictionaries whose values are both gettable and settable using attributes, in addition to standard item-syntax.This means that you don't have to write dictiona...

weixin_36670529的博客 3076

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

python addict模块-像类对象一样优雅的访问字典

项目地址:https://github.com/mewwts/addict/blob/master/README.md addict是一个Python模块,除了标准的项目语法外,还为您提供了字典,这些字典的值可以使用属性进行获取和设置。 这意味着您不再需要编写这样的字典: body = { 'query':{ 'filtered':{ 'query':{ 'match':{ 'description':'add

alex1801 5238

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Addict 一个写起来令人极其舒适的字典模块

Addit 是一个Python模块,除了提供标准的字典语法外,Addit 生成的字典的值既可以使用属性来获取,也可以使用属性进行设置。 这意味着你不用再写这样的字典了: body = { 'query': { 'filtered': { 'query': { 'match': {'description': 'addictive'} }, 'filter': {

z099164的博客 303

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

一个AI教学助手跑通备课到讲题:教师使用DeepTutor的完整应用指南

带三个班、进度一样、水平不一样——同一块板书很难对所有人都合适。DeepTutor 是一个开源的 AI 教学助手,把备课、课上答疑、课后出题和进度跟踪放进同一个工具里:你把教学材料交给它,它帮你搭学习路径;学生卡在哪一步,当场把思路讲清楚;课后自动生成题目,按掌握程度安排复习。下面按一位教师真实的课前、课中、课后流程走一遍。 ## 备课三步走:把一章内容拆成学生能学的路径 **第一步,把材料喂

gitblog_00318的博客 630

pyhon字典转参数 字典转类addict

pyhon字典转参数 字典转类addict a={1:3,2:4}[1] print(a) 后面的中括号是key,取值的意思。

jacke121的专栏 5999

addict深度解析:5个高级用法让你成为Python字典大师

addict是一个功能强大的Python模块,它让字典操作变得前所未有的简单直观。通过addict,你可以像访问对象属性一样操作字典,轻松创建和管理嵌套结构,极大提升Python字典的使用体验。无论是处理复杂的配置文件、构建API请求数据,还是进行多维度数据统计,addict都能成为你手中的瑞士军刀。 ## 1. 告别繁琐嵌套:一键创建深层字典结构 传统Python字典创建嵌套结构时需要逐层定

gitblog_00068的博客 758

告别嵌套地狱:Addict让Python字典操作效率提升10倍的实战指南

你是否还在为Python嵌套字典的繁琐操作而烦恼?多层键值访问时的`KeyError`、手动创建深层结构的重复代码、修改配置时的嵌套赋值困境?作为后端开发者,我们每天平均要处理20+嵌套字典场景,而传统操作方式会消耗30%的开发时间在重复劳动上。本文将系统带你掌握Addict库的核心用法,通过10+实战案例和性能对比,让你彻底摆脱"字典操作困扰",写出更优雅、更高效的Python代码。 读完本文...

gitblog_00466的博客 642

PDFMathTranslate PDF 翻译配置速查:3 类场景选对翻译引擎

PDFMathTranslate 是一款保留版式进行 PDF 全文翻译的开源工具,公式、图表与分栏结构在翻译后原样保留。本文从命令行出发,覆盖安装与验证的最短路径、三类翻译引擎的配置方式,以及少数值得调整的高价值参数,适合能读懂命令行与 JSON 的读者。 ## 五分钟跑通最小可用配置 先装好工具,再谈配置。两种方式任选其一: ```bash pip install pdf2zh ```

gitblog_01052的博客 633

如何用addict快速简化Elasticsearch查询构建:Python开发者的终极指南

在Python开发中,构建复杂的Elasticsearch查询常常需要编写多层嵌套的字典结构,不仅代码冗长难以维护,还容易出现语法错误。addict作为一款轻量级的Python库,通过提供类似JavaScript对象的属性访问方式,让字典操作变得像吸毒一样令人上瘾——简单、高效且欲罢不能。本文将详细介绍如何利用addict库简化Elasticsearch查询构建过程,帮助开发者告别繁琐的字典嵌套,

gitblog_00524的博客 1155

python addict的用法

python addict的用法

徐同保的专栏 947

RevokeMsgPatcher 微信防撤回补丁指南:QQ、TIM 一次搞定,还能微信多开

**RevokeMsgPatcher 是一个免费开源的 Windows 防撤回补丁工具:给 PC 版微信、QQ、TIM 打上一个本地补丁,被撤回的消息就继续留在你的聊天记录里,顺手还支持微信多开。全程点几下鼠标,十分钟能跑通。** ## 先说结论:它能做什么,不能做什么 - **它是个本地补丁工具,不是插件。** 修改的是微信的 `WeChatWin.dll`、QQ/TIM 的 `IM.dll

gitblog_00616的博客 651
上一篇: Python爬虫+颜值打分,5000+图片找到你的Mrs. Right
下一篇: Pandas 骚操作:如何将运行内存占用降低 90%!
菜鸟学Python
博客等级 码龄9年 8082粉丝 571原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值