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

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

问题引入

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

比如这个例子:

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

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

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

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

使用样例

from yydict import YYDict

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

if __name__ == '__main__':
    person = YYDict(person)
    print(person.name)  # frank
    print(person.age)   #  18 

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

from yydict import YYDict


person_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-5678
    print(person_info.Frank.address) # {'street': '123 Main St', 'city': 'New York'} 
    print(person_info.Frank.address.city) # New York
	print(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 YYDict

res_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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

感知机(二分类模型)

目录 1.感知机计算预测值&#xff1a;2.感知机训练&#xff1a;3.损失函数&#xff1a;4.多层感知机&#xff1a;5.单隐藏层的多层感知机代码实现&#xff1a; 1.感知机计算预测值&#xff1a; 训练结果只有1、-1&#xff0c;故正负相同训练正确&#xff0c;正负相反即训练错误…

Python实现分位数回归模型(quantreg算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 分位数回归是简单的回归&#xff0c;就像普通的最小二乘法一样&#xff0c;但不是最小化平方误差的总和…

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

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

[NAND Flash 6.2] NAND 初始化常用命令:复位 (Reset) 和 Read ID 和 Read UID 操作和代码实现

依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解NAND Flash》 <<<< 返回总目录 <<<< 把下文中的字母和数字用`包起来, 中文不变。 全文 4400 字,主要内容 复位的目的和作用? NAND Reset 种类:FFh, FCh, FAh, FDh 区别 Reset 操作步骤 和…

代码随想录——回溯

系列文章目录 代码随想录——回溯 文章目录 系列文章目录概述组合组合组合III电话号码的字母组合组合总和组合总和II 分割分割回文串** 复原ip地址 子集子集子集II 概述 回溯的本质就是递归遍历&#xff0c;但在完成某一条路之后会撤回到上一层&#xff0c;然后重新选择另一条…

Python学习从0到1 day4 python格式化输出和输入方法

其实我不是我&#xff0c;我是青山辽阔 ——24.1.14 一、百分号形式的格式化输出 1.普通输出 #1.定义一些变量 name 陈浩南 age 25 address 广州市天河区#2.变量的输出&#xff08;普通输出&#xff09; print(name) print(age) print(address)#3.Python中&#xff0c;还允…

美摄视频SDK,卓越的视频解决方案

视频已经成为企业传播信息、展示品牌形象的重要工具。然而&#xff0c;高质量的视频制作并不容易&#xff0c;需要专业的技术和设备支持。这就是我们的美摄科技视频SDK发挥作用的地方。作为一家专注于视频技术开发的公司&#xff0c;我们的目标是为企业提供最优质的视频解决方案…

Random的使用

作用&#xff1a;生成伪随机数 1.导包&#xff1a;import java.util.Random 2.得到随机数对象&#xff1a;Random r new Random(); 3.调用随机数的功能获取随机数&#xff1a; 这里随机生成一个0-9的整数&#xff1a; int number r.nextInt(10); 实现指定区间的随机数&a…

【JaveWeb教程】(27)Mybatis的XML配置文件与Mybatis动态SQL 详细代码示例讲解

目录 2. Mybatis的XML配置文件2.1 XML配置文件规范2.2 XML配置文件实现2.3 MybatisX的使用 3. Mybatis动态SQL3.1 什么是动态SQL3.2 动态SQL-if3.2.1 条件查询3.2.2 更新员工 3.3 动态SQL-foreach3.4 动态SQL-sql&include 2. Mybatis的XML配置文件 Mybatis的开发有两种方式…

逻辑回归(解决分类问题)

定义&#xff1a;逻辑回归是一种用于解决分类问题的统计学习方法。它通过对数据进行建模&#xff0c;预测一个事件发生的概率。逻辑回归通常用于二元分类问题&#xff0c;即将数据分为两个类别。它基于线性回归模型&#xff0c;但使用了逻辑函数&#xff08;也称为S形函数&…

QT第3天

如上图界面&#xff0c;需求如下&#xff1a; 1、根据名字添加水果&#xff0c;并设置好单价 2、切换文件查看模式 3、点击任意水果可以显示单价 4、重量改变时&#xff0c;总价自动显示 //widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <Q…

认识监控系统zabbix

利用一个优秀的监控软件&#xff0c;我们可以: ●通过一个友好的界面进行浏览整个网站所有的服务器状态 ●可以在 Web 前端方便的查看监控数据 ●可以回溯寻找事故发生时系统的问题和报警情况 了解zabbix zabbix是什么&#xff1f; ●zabbix 是一个基于 Web 界面的提供分布…

二、QT下载、安装及问题解决(windows系统)

本章节最重要的一点&#xff1a;安装时&#xff0c;路径中不能有中文&#xff0c;切记&#xff0c;否则QT不能正常运行。 下载两种途径&#xff1a; 1、官网下载&#xff0c;慢且不好访问&#xff1b; 2、国内一些大学网站的镜像&#xff0c;下载比较快&#xff0c;但是可能…

Unity中图片合成图集Editor工具

一般图片合成图集用的是Unity自带的SpriteAtlas类添加一个Sprite集合&#xff0c;而所有图片保存在Sprite集合中&#xff0c;然后把Sprite通过Add方法添加到SpriteAtlas类&#xff0c;通过AssetDatabase.CreateAsset()方法来创建图集。

自旋框的使用

1. 自旋框 实例化 //实例化单精度自旋框QSpinBox* spinBox new QSpinBox(this);//实例化双精度自旋框QDoubleSpinBox* doubleSpinBox new QDoubleSpinBox(this);1.1 单精度自旋框 QSpinBox 1.1.1 单精度自旋框的基本函数 QSpinBox_QDoubleSpinBox Dialog.cpp #include "…

高级分布式系统-第12讲 分布式控制经典理论

控制器基础 分布式控制系统的设计&#xff0c;是指在给定系统性能指标的条件下&#xff0c;设计出控制器的控制规律和相应的数字控制算法。 PID控制器 根据偏差的比例&#xff08;Proportional&#xff09;、积分&#xff08;Integral&#xff09;、微分&#xff08;Derivati…

13 | 使用代理ip爬取安居客房源信息

这是一个简单的Python爬虫代码,用于从安居客网站爬取房地产信息。该爬虫使用了代理IP来绕过可能的封禁,并提供了一些基本的信息抽取功能。 如果访问过多,那么可能出现了验证码 对此,最好的方法就是换ip。 使用代理IP的主要目的是保护爬虫的稳定性和隐私。以下是一些常见的原…

现代雷达车载应用——第3章 MIMO雷达技术 3.3节 汽车MIMO雷达测角

经典著作&#xff0c;值得一读&#xff0c;英文原版下载链接【免费】ModernRadarforAutomotiveApplications资源-CSDN文库。 3.3 汽车MIMO雷达测角 在发射天线和接收天线分别为Mt和Mr的汽车MIMO雷达中&#xff0c;可以合成一个由Mt*Mr个阵元组成的虚拟ULA&#xff0c;单元间…

i18n多国语言Internationalization的实现

i18n 是"Internationalization”的缩写&#xff0c;这个术语来源于英文单词中首尾字母“”和“n”以及中间的字符数(共计18个字符) 当我们需要开发不同语言版本时&#xff0c;就可以使用i18n多国语言的一个操作处理&#xff0c;i18n主要实现那一方面的内容呢&#xff1f;…

基于YOLOv7算法的高精度实时六类水果目标检测识别系统(PyTorch+Pyside6+YOLOv7)

摘要&#xff1a;基于YOLOv7算法的高精度实时六类水果目标检测系统可用于日常生活中检测与定位苹果&#xff08;apple&#xff09;、香蕉&#xff08;banan&#xff09;、葡萄&#xff08;grape&#xff09;、橘子&#xff08;orange&#xff09;、菠萝&#xff08;pineapple&a…