yydict属性字典-一种更加方便的方式访问字典

yydict属性字典-一种更加方便的方式访问字典

问题引入

这篇文章是想介绍 最近在使用字典的一种困惑. 我希望通过少写几个字符来访问 python中字典这种数据结构.

比如这个例子:

person = {'name': 'frank','age': 18,'hobby': 'swimming'
}

在python中字典的定义 如上面的例子, 如果我希望访问 person的姓名,我可以使用 pseron['name'] , 或者使用person.get('name') 这两种方式. 这种访问方式本身也没有什么问题, 只是觉得这样访问比较繁琐, 第一种方式我要写一组 中括号,一组引号在加上name 来访问这个字典中的数据.

这让我想起在 JavaScript 语言中,对象访问数据的方式.
在这里插入图片描述

这样的访问方式 是不是 更加好一些呢? 这样是不是更加节省时间呢? 特别是遇到 嵌套字典的情况,只需要通过点操作符就可以访问字典中的元素 是不是很方便呢?

使用样例

from yydict import YYDictperson = {'name': 'frank','age': 18,'hobby': 'swimming'
}if __name__ == '__main__':person = YYDict(person)print(person.name)  # frankprint(person.age)   #  18 

我希望这样的方式进行访问字典中的数据, 这样就会比较方便了, 如果遇到嵌套的情况也是可以的.

from yydict import YYDictperson_info = {'Frank': {'phone': '118-1234-5678','email': 'john@example.com','address': {'street': '123 Main St','city': 'New York',}},'Jane': {'phone': '555-5678','email': 'jane@example.com','address': {'street': '456 Elm St','city': 'San Francisco',}}
}if __name__ == '__main__':person_info = YYDict(person_info)print(person_info.Frank.phone) # 118-1234-5678print(person_info.Frank.address) # {'street': '123 Main St', 'city': 'New York'} print(person_info.Frank.address.city) # New Yorkprint(person_info.Jane.address.city) # San Francisco

上面的字典的访问方式是不是 非常方便呢?

好了今天它来了, 我们可以写一个子类继承dict ,可以通过实现 Python 魔术方法 __setattr__, __getattr__

在字典初始化的时候,把属性顺便也赋值一下.

其实写个类 主要是前端时间在获取一个后端接口数据的时候 返回json 的数据层级特别的深,每次写这个我都很崩溃.

示例数据如下:

data = {"code":20000,"item":[{"content":{},"element_type":"xxx","id":"xxxxx","page_num":[]},{"content":{},"tables":[{"tables":[{"cells":{},"extra_info":{},"mapper":[],"mask":[],"text_matrix":[["12 月 25日(周一)","12 月 26 日(周二)","12 月 27 日(周三)","12 月 28 日(周四)","12 月 29日(周五)","12 月 30日(周六)","12 月 31 日(周日)"]]}]}],"element_type":"paragraph","id":"xxxxxxxxx","page_num":[]}],"status":200
}

我希望获取 text_matrix 里面的信息 这里有4层的嵌套 我才能访问到, 就要写很多多余的中括号来访问到数据.

有了 yydict 就很方便了.

from yydict import YYDictres_data = YYDict(data)matrix = res_data.item[1].tables[0].tables[0].text_matrix
print(matrix)

只需要这样访问就可以了,是不是很方便呢?

注意事项

注意: 如果字典中的key 的名字 和dict 的默认方法名称一样,此时不做任何处理.

data = {"code": 20000,"items": [1,2,3]}res_data = YYDict(data)print(res_data.items) # <built-in method items of YYDict object at 0x10f080590>
print(res_data['items']) # [1, 2, 3]

我们知道 dict 中有一个内置的方法名items,如果此时恰巧的是,字典中的key名称和这个名称一样, 那么此时就老实地 使用 中括号的方式访问吧. 因为不能把原理字典中内置的属性覆盖掉,这样做方式也不太妥当.

这个类我已经写好了,具体的链接在这里yydict repo ,大家可以通过 pip 安装使用, 在使用的过程中,遇到什么bug,欢迎给我提issue ,我会尽快解决.

分享快乐,留住感动. '2024-01-14 16:34:05' --frank

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/622228.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

描述 power iteration(幂法)是啥?

幂法&#xff08;Power Iteration&#xff09;是一种迭代算法&#xff0c;用于计算一个矩阵的最大特征值和对应的特征向量。它是特征值求解问题中常用的一种方法。 幂法基于以下观察&#xff1a;如果一个矩阵 A 的某个特征向量 x 对应的特征值 λ 是最大的&#xff0c;那么当将…

spring boot mybatis plus mapper如何自动注册到spring bean容器

##Import(AutoConfiguredMapperScannerRegistrar.class) ##注册MapperScannerConfigurer ##MapperScannerConfigurer.postProcessBeanDefinitionRegistry方法扫描注册mapper ##找到mapper候选者 ##过滤mapper 类 候选者 ##BeanDefinitionHolder注册到spring 容器

vue项目之.env文件.env.dev、test、pro

.env文件是vue运行项目时的环境配置文件。 .env: 全局默认配置文件&#xff0c;所有环境(开发、测试、生产等&#xff09;均会加载并合并该文件 .env.development(开发环境默认命名) 开发环境的配置&#xff0c;文件名默认为.env.development,如果需要改名也是可以的&#xf…

安卓主板_MTK联发科低功耗迷你安卓核心板开发板定制开发

卓越V100安卓主板 是新移科技推出的4G物联网行业通用主板。卓越V100安卓主板基于 联发科MT6761安卓核心板设计&#xff0c;支持运行Android9.0 系统&#xff0c;通用性强&#xff0c;有很好的人机交互性&#xff0c;可进行二次开发&#xff0c;有良好的移植性。 另外&#xff…

面试经典150题(82-83)

leetcode 150道题 计划花两个月时候刷完&#xff0c;今天&#xff08;第四十一天&#xff09;完成了2道(82-83)150&#xff1a; 82.&#xff08;133. 克隆图&#xff09;题目描述&#xff1a; 给你无向 连通 图中一个节点的引用&#xff0c;请你返回该图的 深拷贝&#xff08…

ZZULIOJ 1118: 数列有序

题目描述 一个非递减有序的整型数组有n个元素&#xff0c;给定一个整数num&#xff0c;将num插入该序列的适当位置&#xff0c;使序列仍保持非递减有序。 要求定义一个函数insert()&#xff0c;将整数num插入在数组a的适当位置上&#xff0c;函数原型如下&#xff1a; void …

面向工业的复合自动机器学习

一、工业数据收集与处理 在面向工业的复合自动机器学习中&#xff0c;数据的收集和处理是至关重要的第一步。工业数据通常具有大规模、高维度和非线性的特点&#xff0c;需要运用先进的数据处理技术进行有效的管理和分析。这包括数据清洗、数据预处理、数据增强等一系列操作&a…

【Python】使用pyinstaller打包为Windows平台的xxx.exe方法步骤

pyinstaller 是一个用于将 Python 代码打包成独立可执行文件的工具&#xff0c;它可以将 Python 代码打包成 Windows、Linux、Mac 等平台的可执行文件&#xff0c;方便用户在不同环境中运行。 pyinstaller用法&#xff1a; 1.安装pyinstaller库&#xff0c;这里以PyCharm环境为…

ZZULIOJ 1113: 递归调用的次数统计(函数专题)

题目描述 如下程序的功能是计算 Fibonacci数列的第n项。函数fib()是一个递归函数。请你改写该程序&#xff0c;计算第n项的同时&#xff0c;统计调用了多少次函数fib&#xff08;包括main()对fib()的调用&#xff09;。 #include<stdio.h> int fib(int k); int main() {…

ACM论文LaTeX模板解析(一)| 模板下载与安装

本文收录于专栏&#xff1a;ACM 论文 LaTeX模板解析&#xff0c;本专栏将会围绕ACM 论文 LaTeX模板解析持续更新。欢迎点赞收藏关注&#xff01; 文章目录 1. 引言2. 下载方式 1. 引言 计算机械协会&#xff08;ACM&#xff0c;Association for Computing Machinery&#xff0…

封装一个ajax请求

这段代码定义了一个名为ajaxRequest的函数&#xff0c;接收三个参数&#xff1a;URL、HTTP方法&#xff08;可选&#xff09;和要发送的数据。该函数会创建一个XMLHttpRequest对象并进行相应配置&#xff0c;然后根据传入的参数发起网络请求。最后通过Promise来处理请求成功或失…

vue3+vant+cropper.js实现移动端图片裁剪功能

一、前言 最近做项目中遇到一个需求&#xff0c;需要对海报图片按照一定的比例进行裁剪并上传到oss。一开始这个需求思路有两个&#xff0c;使用canvas原生或者寻找现成的第三方库&#xff0c;对比了一番觉得canvas实现时间耗费较长&#xff0c;且秉承着不重复造轮子的原则&am…

docker镜像分层

Docker 镜像是由一系列分层&#xff08;layers&#xff09;组成的。每一层都包含了文件系统的一部分或一个操作指令。这种分层结构使得镜像的构建、分发和存储变得更加高效。当你构建一个新的镜像时&#xff0c;Docker 会尽可能地重用已经存在的层&#xff0c;从而减少重复工作…

UG装配-WAVE几何链接器

自上向下&#xff08;自顶向下&#xff09;设计 先将产品主要结构&#xff08;或主要部件&#xff09;建立好&#xff0c;然后再根据要求设计其它组件&#xff0c;使每个组件之间有数据关联&#xff0c;适用于产品开发初期&#xff0c;便于修改&#xff0c;修改组件数据后&…

基于JavaWeb的酒店管理系统

基于JavaWeb的酒店管理系统 文章目录 基于JavaWeb的酒店管理系统系统介绍技术选型成果展示源码获取账号地址及其他说明 系统介绍 基于JavaWeb的酒店管理系统是为酒店打造的管理平台&#xff0c;其主要功能有管理员登陆、客房预订、客房入住、房间管理、数据查询(预订单查询、入…

PySide6/PyQt6中的时间管理类:QTime的使用方法

文章目录 📖 介绍 📖🏡 环境 🏡📒 使用方法 📒📝 创建QTime对象📝 常用方法⚓️ 相关链接 ⚓️📖 介绍 📖 QTime是PySide6中用于处理时间段的类,可以用来表示一天中的时间,例如小时、分钟和秒。它提供了许多操作和格式化时间的功能,使得处理时间变得更加…

mysql-实战案例 (超详细版)

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;重拾MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出现错误&am…

VL53L4CD TOF开发(1)----驱动TOF进行测距

VL53L4CX TOF开发.1--驱动TOF进行测距 概述视频教学样品申请完整代码下载主要特点硬件准备技术规格系统框图应用示意图生成STM32CUBEMX选择MCU串口配置IIC配置 XSHUTX-CUBE-TOF1演示结果 概述 VL53L4CD适用于接近测量和短距离测量&#xff0c;可实现从仅仅1 mm到1300 mm的超精…

SAP SD-DN-MM 交货单相关物料凭证的视图的日期问题

眼下有个需求 获取交货单对应的物料凭证的过账日期BLDAT。 同步BW数据过去 新增一个数据库视图 但是实际使用时&#xff0c;有效部分仅本月&#xff0c;再选择条件里面要加上 MATdoc-bldat > sy-datum - sydatum6(2). 于是使用ST05 跟踪了一下&#xff0c;发现在DD28S…

echarts——折线图实现不同区间不同颜色+下钻/回钻功能——技能提升

echarts——折线图实现不同区间不同颜色下钻/回钻功能——技能提升 需求场景解决步骤1&#xff1a;安装echarts插件解决步骤2&#xff1a;html代码解决步骤3&#xff1a;封装option配置和initChart渲染方法解决步骤4&#xff1a;回钻功能 需求场景 最近在写后台管理系统时&…