Box 模块的使用方法

正常情况下,我们想访问字典中的某个值,都是通过中括号访问,比如:
test_dict = {test: {imdb stars: 6.7, length: 104}}print(test_dict[test][imdb stars])# 104而通过box模块,我们可以扩展字典功能,使用点符号访问元素:
from box import boxmovie_box = box({ robin hood: men in tights: { imdb stars: 6.7, length: 104 } })movie_box.robin_hood_men_in_tights.imdb_stars# 6.7另外,可以看到默认情况下转换后,字典键值中的空格被转化为了下划线。
下面具体介绍 box 模块的使用方法。
1.准备
开始之前,你要确保python和pip已经成功安装在电脑上,如果没有,可以访问这篇文章:超详细python安装指南 进行安装。
**(可选1) **如果你用python的目的是数据分析,可以直接安装anaconda:python数据分析与挖掘好帮手—anaconda,它内置了python和pip.
**(可选2) **此外,推荐大家用vscode编辑器,它有许多的优点:python 编程的最好搭档—vscode 详细指南。
请选择以下任一种方式输入命令安装依赖 :
windows 环境 打开 cmd (开始-运行-cmd)。macos 环境 打开 terminal (command+空格输入terminal)。如果你用的是 vscode编辑器 或 pycharm,可以直接使用界面下方的terminal.pip install --upgrade python-box[all]2.基本使用
我们可以像文章开头那样传入一个字典给 box,生成一个box对象;也可以直接使用参数赋值的方式生成一个box对象:
from box import boxmy_box = box(funny_movie='hudson hawk', best_movie='kung fu panda')my_box.funny_movie# 'hudson hawk'请记住,任何情况下,你往box对象里添加字典或是数组,这些字典或数组都会被转变为box对象:
my_box = box({team: {red: {leader: sarge, members: []}}})print(my_box.team.red.leader)# sargemy_box.team.blue = {leader: church, members: []}print(repr(my_box.team.blue))#访问列表中的 box 对象也非常轻松:
my_box.team.red.members = [ {name: grif, rank: minor junior private negative first class}, {name: dick simmons, rank: captain}]print(my_box.team.red.members[0].name)# grif局限性
请注意,字典中有些默认方法,如: **clear, copy, fromkeys, get, items, keys, pop, popitem, setdefault, to_dict, update, merge_update, values ** ,当你的键值和这些方法名称冲突时,你无法使用点符号访问它们。
不过冲突时,你依然可以使用传统的字典取值访问它们,例如:
my_box['keys']合并
要合并两个box对象,你只需要通过 merge_update 方法:
from box import boxbox_1 = box(val={'important_key': 1})box_2 = box(val={'less_important_key': 2})box_1.merge_update(box_2)print(box_1)# {'val': {'important_key': 1, 'less_important_key': 2}}当然,你也可以用传统的 update 方法:
from box import boxbox_1 = box(val={'important_key': 1})box_2 = box(val={'less_important_key': 2})box_1.update(box_2)print(box_1)# {'val': {'less_important_key': 2}}转换为原始列表/字典
如果你需要把一个 box 对象的字典转化为原始字典,.to_dict() 方法就可以帮你实现:
from box import boxbox_1 = box(val={'important_key': 1})print(box_1)# {'val': {'less_important_key': 2}}print(type(box_1))# print(type(box_1.to_dict()))# 如果你需要把一个 box 对象的列表转化为原始列表,你可以使用 .to_list() 方法:
from box import boxlistmy_boxlist = boxlist({'item': x} for x in range(10))# my_boxlist[5].item# 5print(type(my_boxlist.to_list()))# 3.导入导出功能
box对象有一个很方便的功能,就是能够轻松地将box对象导出为 **json / yaml / csv / msgpack **文件:
from box import boxlistmy_boxlist = boxlist({'item': x} for x in range(10))# my_boxlist.to_json(filename=test.json)# 在当前文件夹下生成一个 test.json 文件此外,还能接受** json / yaml / csv / msgpack **文件导入:
new_box = box.from_json(filename=films.json)各种类型的文件对应的方法如下:
转换器方法描述
to_dict 递归地将所有 box(和 boxlist)对象转换回字典(和列表)
to_json 将 box 对象另存为 json 字符串或使用filename参数写入文件
to_yaml 将 box 对象另存为 yaml 字符串或使用filename参数写入文件
to_msgpack 将 box 对象另存为 msgpack 字节或使用filename参数写入文件
to_toml* 将 box 对象另存为 toml 字符串或使用filename参数写入文件
to_csv** 将 boxlist 对象另存为 csv 字符串或使用filename参数写入文件
from_json classmethod,从一个 json 文件或字符串创建一个 box 对象(所有 box 参数都可以传递)
from_yaml 类方法,从 yaml 文件或字符串创建一个 box 对象(所有 box 参数都可以传递)
from_msgpack classmethod,从msgpack文件或字节创建一个box对象(所有box参数都可以传递)
from_toml* classmethod,从toml文件或字符串创建一个box对象(所有box参数都可以传递)
from_csv** classmethod,从一个csv文件或字符串创建一个boxlist对象(可以传递所有boxlist参数)
不适用于 boxlist,仅适用于 box ** 不适用于 box,仅适用于 boxlist。

MethodHandle调用示例
常见的几种Modbus网关介绍
modbus 如何读取浮点数
什么是电池材料隔膜剂?
搭建做交易所平台开发币币OTC系统软件公司
Box 模块的使用方法
如何启动本机docker服务
做技术,切不可沉湎于技术~
CRM客户关系管理分析模型——RFM模型
亚马逊AWS业务成长最快,下一步转投人工智能
智能网联汽车确定通信频段,车路协同开始火爆
四款可视化工具的优缺点
vivoXplay7新机曝光:全面屏+前后双摄,领先苹果三星的屏下指纹识别,vivoxplay7必将大火?
嵌入式工控机在物流领域有着怎样的应用
音频线的接法
【安全算法之MD5】MD5摘要运算的C语言源码实现
可折叠智能手机至少在未来五年内有望继续使用UTG和CPI
红米Note8系列相比Note7系列,有哪些提升?
模数转换器ADC1001CCJ特性概述
聊聊驾驶员疲劳监测系统发展趋势