Box,一个字典操作python库

news/2024/10/6 3:28:07/文章来源:https://www.cnblogs.com/pywen/p/18285782

 

Box介绍

Box 是一个让字典操作变得异常简单与直观,支持通过属性访问字典内容的库。

 

特点概述

  • 属性访问
    • Box 允许用户像访问对象属性一样访问字典的值,提升了代码的可读性和易用性。
  • 无缝嵌套
    • 自动将嵌套的字典转换为 Box 对象,使得处理复杂字典结构变得轻而易举。
  • 灵活性强
    • 支持多种序列化和反序列化格式,包括 JSON 和 YAML,极大地扩展了其用途。

 

安装方法

pip install python-box -i https://pypi.tuna.tsinghua.edu.cn/simple/

  

功能一:基本字典操作

Box 可以将任何字典快速转换为一个对象,这样你就可以用点号来访问字典的值。

这种方式使得字典数据的读取更加直观和便捷。

from box import Box
movie_data = {"name": "Inception", "director": "Christopher Nolan"}
movie = Box(movie_data)
print(movie.name)

  

功能二:处理嵌套字典

Box 能够处理复杂的嵌套字典,并自动将所有内部字典转换为 Box 对象。例如:

from box import Boxdata = {"demo": {"department": "Engilsh","courses": [{"name": "1班", "students": [{"name": "Alice"}, {"name": "Bob"}]},{"name": "2班", "students": [{"name": "Clara"}, {"name": "Dennis"}]}]}
}new_data = Box(data)
# 访问课程名称和学生姓名
for course in new_data.demo.courses:print(f"Course Name: {course.name}")for student in course.students:print(f"Student Name: {student.name}")

 

 

高级应用

在处理更高级的场景时,Box 库可以非常方便地处理和变换嵌套的数据结构,同时提供强大的定制功能,比如自定义对象或方法的插入。

这段代码展示了如何轻松处理列表中包含的字典,无需额外的循环或条件逻辑。

from box import Boxdata = {"system": {"name": "Control System","components": {"sensor": {"type": "temperature", "value": 23},"actuator": {"type": "heater", "status": "off"}}}
}# 确保在创建 Box 对象时启用点符号访问
system_box = Box(data, box_dots=True)# 定义更新组件状态的方法
def update_component_status(system, component, **kwargs):# 注意这里使用的是 system.system.components 来访问if component in system.system.components:system.system.components[component].update(kwargs)print(f"更新 {component}: {system.system.components[component]}")else:print("找不到")# 将方法绑定到 Box 对象
system_box.update_status = update_component_status.__get__(system_box, Box)# 更新传感器值并检查结果
system_box.update_status('sensor', value=25)# 定义检查系统状态的方法
def check_status(system):sensor_value = system.system.components.sensor.valueif sensor_value > 24:system.system.components.actuator.status = "on"print("状态修改为on.")else:system.system.components.actuator.status = "off"print("状态不修改")# 将检查状态的方法绑定到 Box 对象
system_box.check_system_status = check_status.__get__(system_box, Box)# 执行状态检查
system_box.check_system_status()

  

 

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

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

相关文章

(四)JS逆向——中国观鸟网

爬取观鸟网的信息 有sign值,timestamp和requestid,要看这些值是怎么生成的 载荷有加密的数据 返回值也经过加密 搜索requestid,找到了eval加密的代码,通过解密,就能找到生成这些值的代码段 代码格式化后,找到了这几个值的生成位置 requestid的生成是随机值,timestamp是时…

vscode插件安装好用

本文来自博客园,作者:prince11,转载请注明原文链接:https://www.cnblogs.com/prince11/p/18285764

java List子父级集合转List树工具类

java List集合转Tree集合 1.创建泛型工具类package com.demo;import org.springframework.util.CollectionUtils;import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util…

博客屋网址导航自适应主题php源码

博客屋网址导航自适应主题php源码v1.0是一个以PHP+MySQL进行开发的网址导航源码。模板源码后台开源无加密,可二次开发,前端响应式自适应多端屏幕。主题源码适合个人建站技术,个人博客论坛,个人日记分享等个人网站内容。站长也可以修改成其他行业的内容目录导航。演示地址ht…

【vue】为什么v-for中需要一个key呢?

通过key值来区分循环中的子内容

在wsl中部署puppeteer的相关笔记

二. 缺少依赖问题反复提示缺少各种依赖,到处搜刮一顿操作之后是没问题了,但也不知道哪些是无所谓的 apt install -y gconf-service libc6 libcairo2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libstdc++6 libx11-6 apt inst…

《计算机组成与系统结构(第二版) 裘雪红 李伯成 西安电子科技大学出版社》课后习题答案(带解析)(七)

此系列答案配套《计算机组成与系统结构(第二版) 裘雪红 李伯成 西安电子科技大学出版社》一书相关内容。所有内容为博主个人编辑,仅作参考学习交流之用,转载请注明出处。如发现错误,请联系博主及时勘误。如有侵权行为,博主将立即下架全部内容。声明:此系列答案配套《计…

【设计模式(二)】创建型模式--抽象工厂模式

创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。抽象工厂模式也是⼀种创建型设计模式,提供了一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类 抽象工厂…

[Java] Java 关键字 : transient

0 序 Java中的transient关键字,transient是短暂的意思。对于transient修饰的成员变量,在类的实例对象的序列化处理过程中会被忽略。 因此,transient变量不会贯穿对象的序列化和反序列化,生命周期仅存于调用者的内存中而不会写到磁盘里进行持久化。 1 序列化Java中对象的序列…

告别 .NET 7,支持将于 5 月结束——我们几乎不认识你

微软 .NET 7 软件框架的支持将于 5 月结束,这距离其 2022 年发布仅过去 18 个月——这提醒我们,长期更新时代正在成为过去。 .NET 7 于 2022 年 11 月 8 日首次亮相,与其前身不同的是,它是一个标准期限支持 (STS) 版本,这意味着它的支持期为 18 个月。.NET 6 和 .NET 8 都…

在Ubantu22.04中运行ORB_SLAM3

在Ubantu22.04中运行ORB_SLAM3 一、概述 ORB-SLAM3是一个支持视觉、视觉加惯导、混合地图的SLAM系统,可以在单目,双目和RGB-D相机上利用针孔或者鱼眼模型运行。从第一版的单目相机系统,到第二版加入了对stereo以及RGBD camera的支持,再到目前最新版本的orb-slam整合了visua…

gitlab 解锁账号

现象 登录gitlab后显示 账号被锁,登录方式AD域 管理员后台查看账号 如果是在gitlab导致的锁,那么账号显示的就是Blocked,如果是LDAP导致就是LDAP Blocked,并且后者无法在gitlab UI界面解锁 解锁登录控制端 gitlab-rails console搜索用户user = User.find_by_email("m…