>> profile = dict(name= "iswbm" ) >>> profile { 'name' : 'iswbm' } >>> profile[ "name" ] 'is" />

色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于替換原生字典munch的使用全解

科技綠洲 ? 來源:Python實(shí)用寶典 ? 作者:Python實(shí)用寶典 ? 2023-10-31 14:12 ? 次閱讀

字典是 Python 中基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)之一,字典的使用,可以說是非常的簡(jiǎn)單粗暴,但即便是這樣一個(gè)與世無爭(zhēng)的數(shù)據(jù)結(jié)構(gòu),仍然有很多人 "看不慣它" 。

也許你并不覺得,但我相信,你看了這篇文章后,一定會(huì)和我一樣,對(duì)原生字典開始有了偏見。

我舉個(gè)簡(jiǎn)單的例子吧

當(dāng)你想訪問字典中的某個(gè) key 時(shí),你需要使用字典特定的訪問方式,而這種方式需要你鍵入 一對(duì)中括號(hào) 還有 一對(duì)引號(hào)

>>> profile = dict(name="iswbm")
>>> profile
{'name': 'iswbm'}
>>> profile["name"]
'iswbm'

是不是開始覺得忍無可忍了?

如果可以像調(diào)用對(duì)象屬性一樣使用 . 去訪問 key 就好了,可以省去很多多余的鍵盤擊入,就像這樣子

>>> profile.name
'iswbm'

是的,今天這篇文章就是跟大家分享一種可以直接使用 . 訪問和操作字典的一個(gè)黑魔法庫(kù) -- munch

1. 安裝方法

使用如下命令進(jìn)行安裝

$ python -m pip install munch

2. 簡(jiǎn)單示例

munch 有一個(gè) Munch 類,它繼承自原生字典,使用 isinstance 可以驗(yàn)證

>>> from munch import Munch
>>> profile = Munch()
>>> isinstance(profile, dict)
True
>>>

并實(shí)現(xiàn)了點(diǎn)式賦值與訪問,profile.nameprofile['name'] 是等價(jià)的

>>> profile.name = "iswbm"
>>> profile.age = 18
>>> profile
Munch({'name': 'iswbm', 'age': 18})
>>>
>>> profile.name
'iswbm'
>>> profile["name"]
'iswbm'

3. 兼容字典的所有操作

本身 Munch 繼承自 dict,dict 的操作也同樣適用于 Munch 對(duì)象,不妨再來驗(yàn)證下

首先是:增刪改查

# 新增元素
>>> profile["gender"] = "male"
>>> profile
Munch({'name': 'iswbm', 'age': 18, 'gender': 'male'})

# 修改元素
>>> profile["gender"] = "female"
>>> profile
Munch({'name': 'iswbm', 'age': 18, 'gender': 'female'})

# 刪除元素
>>> profile.pop("gender")
'female'
>>> profile
Munch({'name': 'iswbm', 'age': 18})
>>>
>>> del profile["age"]
>>> profile
Munch({'name': 'iswbm'})

再者是:一些常用方法

>>> profile.keys()
dict_keys(['name'])
>>>
>>> profile.values()
dict_values(['iswbm'])
>>>
>>> profile.get('name')
'iswbm'
>>> profile.setdefault('gender', 'male')
'male'
>>> profile
Munch({'name': 'iswbm', 'gender': 'male'})

4. 設(shè)置返回默認(rèn)值

當(dāng)訪問一個(gè)字典中不存在的 key 時(shí),會(huì)報(bào) KeyError 的錯(cuò)誤

>>> profile = {}
>>> profile["name"]
Traceback (most recent call last):
File "", line 1, in
KeyError: 'name'

對(duì)于這種情況,通常我們會(huì)使用 get 來規(guī)避

>>> profile = {}
>>> profile.get("name", "undefined")
'undefined'

當(dāng)然你在 munch 中仍然可以這么用,不過還有一種更好的方法:使用 DefaultMunch,它會(huì)在你訪問不存在的 key 時(shí),給你返回一個(gè)設(shè)定好的默認(rèn)值

>>> from munch import DefaultMunch
>>> profile = DefaultMunch("undefined", {"name": "iswbm"})
>>> profile
DefaultMunch('undefined', {'name': 'iswbm'})
>>> profile.age
'undefined'
>>> profile
DefaultMunch('undefined', {'name': 'iswbm'})

5. 工廠函數(shù)自動(dòng)創(chuàng)建key

上面使用 DefaultMunch 僅當(dāng)你訪問不存在的 key 是返回一個(gè)默認(rèn)值,但這個(gè)行為并不會(huì)修改原 munch 對(duì)象的任何內(nèi)容。

若你想訪問不存在的 key 時(shí),自動(dòng)觸發(fā)給原 munch 中新增你想要訪問的 key ,并為其設(shè)置一個(gè)默認(rèn)值,可以試一下 DefaultFactoryMunch 傳入一個(gè)工廠函數(shù)。

>>> from munch import DefaultFactoryMunch
>>> profile = DefaultFactoryMunch(list, name='iswbm')
>>> profile
DefaultFactoryMunch(list, {'name': 'iswbm'})
>>>
>>> profile.brothers
[]
>>> profile
DefaultFactoryMunch(list, {'name': 'iswbm', 'brothers': []})

6. 序列化的支持

Munch 支持序列化為 JSON 或者 YAML 格式的字符串對(duì)象

轉(zhuǎn)換成 JSON

>>> from munch import Munch
>>> munch_obj = Munch(foo=Munch(lol=True), bar=100, msg='hello')
>>>
>>> import json
>>> json.dumps(munch_obj)
'{"foo": {"lol": true}, "bar": 100, "msg": "hello"}'

轉(zhuǎn)換成 YAML

>>> from munch import Munch
>>> munch_obj = Munch(foo=Munch(lol=True), bar=100, msg='hello')
>>> import yaml
>>> yaml.dump(munch_obj)
'!munch.Munchnbar: 100nfoo: !munch.Munchn lol: truenmsg: hellon'
>>>
>>> print(yaml.dump(munch_obj))
!munch.Munch
bar: 100
foo: !munch.Munch
lol: true
msg: hello

>>>

建議使用 safe_dump 去掉 !munch.Munch

>>> print(yaml.safe_dump(munch_obj))
bar: 100
foo:
lol: true
msg: hello

以上就是關(guān)于 munch 的使用全解,替換原生字典絕無問題,munch 的進(jìn)一步封裝使得數(shù)據(jù)的訪問及操作更得更加 Pythonic 了,希望有一天這個(gè)特性能夠體現(xiàn)在原生的字典上。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)結(jié)構(gòu)

    關(guān)注

    3

    文章

    573

    瀏覽量

    40190
  • 字典
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    7722
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4807

    瀏覽量

    84944
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    雙面FPC制造工藝手冊(cè)

    雙面FPC制造工藝手冊(cè) FPC開料-雙面FPC制造工藝     除部分材料以外,柔性印制板所用的
    發(fā)表于 03-17 10:50 ?1822次閱讀

    新版中九字典算法替換工具,支持9月22號(hào)第六套算法

    有四個(gè)主要的功能:第一種:都不勾選時(shí),能查看備份BIN有幾套算法或字典的功能,并能具體查出是哪幾套。第二種:只勾選“APP”時(shí),能解壓備份BIN中的APP。第三種,只勾選“替換”時(shí),能進(jìn)行算法或字典
    發(fā)表于 09-23 00:04

    瀾啟第6套字典算法替換工具

    中九瀾啟方案第6套字典算法替換工具(2011-9-22更新)請(qǐng)?jiān)?b class='flag-5'>替換前面打鉤,然后將瀾起文件拖入就OK了,文件保存在同一文件夾中
    發(fā)表于 09-23 13:24

    LabVIEW很全面很強(qiáng)大

    LabVIEW很全面很強(qiáng)大
    發(fā)表于 10-17 15:02

    單片機(jī)資料,詳細(xì)

    單片機(jī)資料,希望大家有用
    發(fā)表于 07-20 08:48

    報(bào)文解析工具中的XML數(shù)據(jù)字典

    針對(duì)報(bào)文解析過程中存在的數(shù)據(jù)存儲(chǔ)無序、查詢和調(diào)用不便等問題,提出應(yīng)用XML 數(shù)據(jù)字典進(jìn)行數(shù)據(jù)存儲(chǔ)的方案。根據(jù)給定的數(shù)據(jù)表,設(shè)計(jì)XML 形式的數(shù)據(jù)字典。實(shí)現(xiàn)XML 字典數(shù)據(jù)的
    發(fā)表于 03-28 09:38 ?36次下載

    電子白板術(shù)語

    電子白板術(shù)語 有效讀取尺寸 是指電子白板可以書寫使用的有效尺寸,在這個(gè)區(qū)域內(nèi)可以任意書寫
    發(fā)表于 02-08 13:43 ?417次閱讀

    GPRS無線參數(shù)

    GPRS無線參數(shù) 作為移動(dòng)通信系統(tǒng),GSM網(wǎng)絡(luò)中與無線設(shè)備和接口有關(guān)的參數(shù)的設(shè)置對(duì)于網(wǎng)絡(luò)的服務(wù)性能如小區(qū)的覆蓋、信令流量的分布、網(wǎng)絡(luò)的業(yè)
    發(fā)表于 03-13 10:41 ?571次閱讀

    TCP-IP協(xié)議學(xué)習(xí)教程

    TCP-IP協(xié)議學(xué)習(xí)教程,壓縮包內(nèi)一共30章
    發(fā)表于 08-24 18:31 ?0次下載

    一種多字典遙感圖像超分辨算法

    ;然后,利用全局限制求取高分辨率圖像的初始;最后,利用正交匹配追蹤算法(OMP)對(duì)初始在小波域進(jìn)行多字典稀疏求解。實(shí)驗(yàn)結(jié)果表明,相比基于單字典的超分辨重建算法,結(jié)果圖像的主觀視覺效
    發(fā)表于 12-03 10:55 ?2次下載

    解決不重復(fù)序列的排列問題的兩個(gè)方法:遞歸和字典序法

    這篇文章主要介紹了解決不重復(fù)序列的排列問題的兩個(gè)方法:遞歸和字典序法。
    的頭像 發(fā)表于 03-29 11:19 ?6523次閱讀
    解決不重復(fù)序列的<b class='flag-5'>全</b>排列問題的兩個(gè)方法:遞歸和<b class='flag-5'>字典</b>序法

    CANOpen系列教程10_ 關(guān)于Canfestival及對(duì)象字典生成工具環(huán)境搭建

    CANOpen系列教程10_關(guān)于Canfestival及對(duì)象字典生成工具環(huán)境搭建
    的頭像 發(fā)表于 03-06 15:52 ?1.1w次閱讀

    計(jì)算機(jī)算術(shù)運(yùn)算實(shí)現(xiàn)原理

    計(jì)算機(jī)算術(shù)運(yùn)算實(shí)現(xiàn)原理
    發(fā)表于 03-26 14:04 ?5次下載

    python字典是什么

    python字典 字典(英文名 dict),它是由一系列的鍵值(key-value)對(duì)組合而成的數(shù)據(jù)結(jié)構(gòu)。 字典中的每個(gè)鍵都與一個(gè)值相關(guān)聯(lián),其中 鍵,必須是可 hash 的值,如字符串,數(shù)值等 值
    的頭像 發(fā)表于 02-23 16:54 ?3516次閱讀

    Python序列的字典類型介紹

    字典 介紹 字典是“鍵值對(duì)”的無序可變序列,字典中的每個(gè)元素都是一個(gè)“鍵值對(duì)”,包含:“鍵對(duì)象”和“值對(duì)象”。 可以通過“鍵對(duì)象”實(shí)現(xiàn)快速獲取、刪除、更新對(duì)應(yīng)的“值對(duì)象” 字典特點(diǎn):
    的頭像 發(fā)表于 03-08 17:35 ?1347次閱讀
    Python序列的<b class='flag-5'>字典</b>類型介紹
    主站蜘蛛池模板: 女女破视频在线观看 | 99精品视频在线观看re | 海角社区在线视频播放观看 | 青青草原伊人网 | 亚洲春色AV无码专区456 | 歪歪爽蜜臀AV久久精品人人槡 | 国产午夜伦伦伦午夜伦 | 白嫩美女直冒白浆 | 嫩草成人影院 | 爆乳啪啪无码成人二区亚洲欧美 | 国产亚洲精品久久无码98 | 日本一卡2卡3卡四卡精品网站 | 尿了么app| 叔叔 电影完整版免费观看韩国 | 91久久偷偷做嫩草影院免 | 日日夜夜操操操 | 97超碰射射射 | 在线视频 国产 日韩 欧美 | 动漫美女禁区图 | 亚洲视频中文 | 樱桃视频高清免费观看在线播放 | 国产精品久久久久无码AV色戒 | 中文字幕在线观看 | 97精品国产自产在线观看永久 | 色播成人影院 | 日韩精品久久日日躁夜夜躁影视 | 国产日韩欧美综合久久 | 久久国产主播福利在线 | 纯肉高H种马艳遇风流多 | 99热久久久无码国产精品性麻豆 | 中文字幕乱码在线人视频 | 兽皇VIDEO另类HD| 中文在线日韩亚洲制服 | 18禁止看的免费污网站 | 91视频18 | 欧美日韩亚洲中字二区 | 暖暖 免费 高清 日本视频大全 | 欧美尤物射精集锦 | 超碰caoporon最新视频 | 美女内射少妇三区五区 | 久久久97丨国产人妻熟女 |