正常情況下,我們想訪問字典中的某個(gè)值,都是通過(guò)中括號(hào)訪問,比如:
test_dict = {"test": {"imdb stars": 6.7, "length": 104}}
print(test_dict["test"]["imdb stars"])
# 104
而通過(guò)Box模塊,我們可以擴(kuò)展字典功能,使用點(diǎn)符號(hào)訪問元素:
from box import Box
movie_box = Box({ "Robin Hood: Men in Tights": { "imdb stars": 6.7, "length": 104 } })
movie_box.Robin_Hood_Men_in_Tights.imdb_stars
# 6.7
另外,可以看到默認(rèn)情況下轉(zhuǎn)換后,字典鍵值中的空格被轉(zhuǎn)化為了下劃線。
下面具體介紹 Box 模塊的使用方法。
1.準(zhǔn)備
開始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細(xì)Python安裝指南 進(jìn)行安裝。
**(可選1) **如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda,它內(nèi)置了Python和pip.
**(可選2) **此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點(diǎn):Python 編程的最好搭檔—VSCode 詳細(xì)指南。
請(qǐng)選擇以下任一種方式輸入命令安裝依賴 :
- Windows 環(huán)境 打開 Cmd (開始-運(yùn)行-CMD)。
- MacOS 環(huán)境 打開 Terminal (command+空格輸入Terminal)。
- 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install --upgrade python-box[all]
2.基本使用
我們可以像文章開頭那樣傳入一個(gè)字典給 Box,生成一個(gè)Box對(duì)象;也可以直接使用參數(shù)賦值的方式生成一個(gè)Box對(duì)象:
from box import Box
my_box = Box(funny_movie='Hudson Hawk', best_movie='Kung Fu Panda')
my_box.funny_movie
# 'Hudson Hawk'
請(qǐng)記住,任何情況下,你往Box對(duì)象里添加字典或是數(shù)組,這些字典或數(shù)組都會(huì)被轉(zhuǎn)變?yōu)锽ox對(duì)象:
my_box = Box({"team": {"red": {"leader": "Sarge", "members": []}}})
print(my_box.team.red.leader)
# Sarge
my_box.team.blue = {"leader": "Church", "members": []}
print(repr(my_box.team.blue))
#
訪問列表中的 Box 對(duì)象也非常輕松:
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
局限性
請(qǐng)注意,字典中有些默認(rèn)方法,如: **clear, copy, fromkeys, get, items, keys, pop, popitem, setdefault, to_dict, update, merge_update, values
** ,當(dāng)你的鍵值和這些方法名稱沖突時(shí),你無(wú)法使用點(diǎn)符號(hào)訪問它們。
不過(guò)沖突時(shí),你依然可以使用傳統(tǒng)的字典取值訪問它們,例如:
my_box['keys']
合并
要合并兩個(gè)Box對(duì)象,你只需要通過(guò) merge_update 方法:
from box import Box
box_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}}
當(dāng)然,你也可以用傳統(tǒng)的 update 方法:
from box import Box
box_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}}
轉(zhuǎn)換為原始列表/字典
如果你需要把一個(gè) Box 對(duì)象的字典轉(zhuǎn)化為原始字典,.to_dict() 方法就可以幫你實(shí)現(xiàn):
from box import Box
box_1 = Box(val={'important_key': 1})
print(box_1)
# {'val': {'less_important_key': 2}}
print(type(box_1))
# < class 'box.box.Box' >
print(type(box_1.to_dict()))
# < class 'dict' >
如果你需要把一個(gè) Box 對(duì)象的列表轉(zhuǎn)化為原始列表,你可以使用 .to_list() 方法:
from box import BoxList
my_boxlist = BoxList({'item': x} for x in range(10))
#
my_boxlist[5].item
# 5
print(type(my_boxlist.to_list()))
# < class 'list' >
3.導(dǎo)入導(dǎo)出功能
Box對(duì)象有一個(gè)很方便的功能,就是能夠輕松地將Box對(duì)象導(dǎo)出為 **Json / yaml / csv / msgpack
**文件:
from box import BoxList
my_boxlist = BoxList({'item': x} for x in range(10))
#
my_boxlist.to_json(filename="test.json")
# 在當(dāng)前文件夾下生成一個(gè) test.json 文件
此外,還能接受** Json / yaml / csv / msgpack
**文件導(dǎo)入:
new_box = Box.from_json(filename="films.json")
各種類型的文件對(duì)應(yīng)的方法如下:
轉(zhuǎn)換器方法 | 描述 |
---|---|
to_dict | 遞歸地將所有 Box(和 BoxList)對(duì)象轉(zhuǎn)換回字典(和列表) |
to_json | 將 Box 對(duì)象另存為 JSON 字符串或使用filename 參數(shù)寫入文件 |
to_yaml | 將 Box 對(duì)象另存為 YAML 字符串或使用filename 參數(shù)寫入文件 |
to_msgpack | 將 Box 對(duì)象另存為 msgpack 字節(jié)或使用filename 參數(shù)寫入文件 |
to_toml* | 將 Box 對(duì)象另存為 TOML 字符串或使用filename 參數(shù)寫入文件 |
to_csv** | 將 BoxList 對(duì)象另存為 CSV 字符串或使用filename 參數(shù)寫入文件 |
from_json | Classmethod,從一個(gè) JSON 文件或字符串創(chuàng)建一個(gè) Box 對(duì)象(所有 Box 參數(shù)都可以傳遞) |
from_yaml | 類方法,從 YAML 文件或字符串創(chuàng)建一個(gè) Box 對(duì)象(所有 Box 參數(shù)都可以傳遞) |
from_msgpack | Classmethod,從msgpack文件或字節(jié)創(chuàng)建一個(gè)Box對(duì)象(所有Box參數(shù)都可以傳遞) |
from_toml* | Classmethod,從TOML文件或字符串創(chuàng)建一個(gè)Box對(duì)象(所有Box參數(shù)都可以傳遞) |
from_csv** | Classmethod,從一個(gè)CSV文件或字符串創(chuàng)建一個(gè)BoxList對(duì)象(可以傳遞所有BoxList參數(shù)) |
- 不適用于 BoxList,僅適用于 Box ** 不適用于 Box,僅適用于 BoxList。
-
模塊
+關(guān)注
關(guān)注
7文章
2783瀏覽量
49633 -
BOX
+關(guān)注
關(guān)注
0文章
16瀏覽量
13349 -
編輯器
+關(guān)注
關(guān)注
1文章
817瀏覽量
31783 -
數(shù)據(jù)分析
+關(guān)注
關(guān)注
2文章
1470瀏覽量
34805
發(fā)布評(píng)論請(qǐng)先 登錄
紅外尋跡模塊的使用方法
天線的選擇與使用方法
S3C44BOX與LMO57QCIT01的接口方法及其應(yīng)用
IGBT驅(qū)動(dòng)模塊EXB841使用方法的改進(jìn)
AURORA的功能模塊和使用方法介紹

示波器的使用方法(三):示波器的使用方法詳解
STM32G0開發(fā)筆記:SD卡模塊的使用方法

Channel模塊的使用方法示例
Camelot模塊的使用方法

評(píng)論