程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python 數據結構之字典

編輯:Python

python 常見的數據結構之一就是字典,關於遍歷,插入,刪除。常見的比如使用items(),update,pop等。索引的時候使用keys()。

>>> dic = dict(key='value')
>>> dic
{
'key': 'value'}
>>> dic['key']
'value'
>>> dic.get('key')
'value'

過去的用法大都是使用[‘key’]或者get的形式去訪問,因為get對於不存在的key可以返回None,但是如果一個字典不存在一個key使用[‘key’]則會提示key錯誤的問題.因此如果要使用傳統的方法去范圍字典,建議使用dict.get(‘key’)的形式

>>> dic['name']
Traceback (most recent call last):
File "<input>", line 1, in <module>
KeyError: 'name'
>>> dic.get('name')

那如果能使用對象.屬性的方式去訪問,便可以大大簡化訪問的繁文缛節了。下面介紹一下字典操作和訪問的一個庫much

1.環境安裝

python -m pip install munch

2.范例使用

使用instance判斷實例類型和字典訪問

from munch import Munch
dicMu = Munch()
print(isinstance(dicMu , dict))
dicMu .key = 'value'
print(f'輸出dic["key"]形式: {
dicMu ["key"]}')
print(f'輸出dic.get("key")形式: {
dicMu .get("key")}')
print(f'輸出dic.key形式: {
dicMu .key}')

輸出如下:

True
輸出dic["key"]形式: value
輸出dic.get("key")形式: value
輸出dic.key形式: value

因為Munch類繼承於dict,因此子類Munch適用於父類dict對字典的常規操作。涉及增刪改查都可以使用

from munch import Munch
dicMu = Munch()
dicMu.name = 'zhiyu'
dicMu['age'] = 'NN'
print(f'原始字典: {
dicMu}')
# 增加元素
dicMu['gender'] = 'big man'
dicMu.name2 = 'zhiyu2'
print(f'字典插入數據: {
dicMu}')
# 修改元素
dicMu['gender'] = 'modifyMan'
dicMu.name2 = 'modifyName'
print(f'字典修改數據: {
dicMu}')
# 刪除元素
dicMu.pop('gender')
print(f'字典刪除數據: {
dicMu}')

輸出為:

原始字典: Munch({
'name': 'zhiyu', 'age': 'NN'})
字典插入數據: Munch({
'name': 'zhiyu', 'age': 'NN', 'gender': 'big man', 'name2': 'zhiyu2'})
字典修改數據: Munch({
'name': 'zhiyu', 'age': 'NN', 'gender': 'modifyMan', 'name2': 'modifyName'})
字典刪除數據: Munch({
'name': 'zhiyu', 'age': 'NN', 'name2': 'modifyName'})

當然刪除數據還可以使用

del dicMu['name2']
del dicMu.name2

另外對於字典的一些其他方法也是適用的,比如遍歷方法dicMu.items(),dicMu.keys(),dicMu.vaules(),dicMu.setdefault(‘gender’, ‘male’)等也同樣適用。

3. 設置默認值

from munch import Munch
dicMu = Munch()
dicMu.name = 'zhiyu'
dicMu['age'] = 'NN'
print(f'原始字典: {
dicMu}')
print(dicMu.get('gender'))
print(dicMu.get('gender'), 'none data')
dicMu.setdefault('gender', 'male')
print(dicMu.get('gender'))

還有一種方法就是使用Munch中的DefaultMunch,功能類似setdefault在訪問不存在的key時,返回一個指定的默認值。且可以指定多個數據的默認值,而不用像使用get一樣,每個都設置一下,或者使用setdefault進行設置

from munch import DefaultMunch
dicMu = DefaultMunch('undefined', {
'name':'zhiyu'})
print(dicMu)
print(dicMu.age)
print(dicMu.gender)

輸出為:

DefaultMunch('undefined', {
'name': 'zhiyu'})
undefined
undefined

上面這個是訪問不存在的key時,返回給指定的提示不存在數據,如沒有age,訪問age時提示undefined。還有一種情況是如果沒有這個key,則給字典新增一個key值。即訪問Munch對象不存在的key時,自動觸發給Munch對象新增一個key並且為其設置一個默認值,這個時候需要使用到DefaultFactoryMunch函數。

from munch import DefaultFactoryMunch
dicMu1 = DefaultFactoryMunch(list, {
'name':'zhiyu'})
print(dicMu1.age)
dicMu2 = DefaultFactoryMunch(dict, {
'name':'zhiyu'})
print(dicMu2.age)
dicMu3 = DefaultFactoryMunch(tuple, {
'name':'zhiyu'})
print(dicMu3.age)
print(dicMu3)
dicMu3.age = 'NN'
print(dicMu3)
dicMu4 = DefaultFactoryMunch('undefined', {
'name':'zhiyu'})
DefaultFactoryMunch(tuple, {
'name': 'zhiyu', 'age': 'NN'})
print(dicMu4.age)

輸出如下:

[]
{
}
Traceback (most recent call last):
DefaultFactoryMunch(tuple, {
'name': 'zhiyu', 'age': ()})
File "D:\python37\lib\site-packages\munch\__init__.py", line 103, in __getattr__
return object.__getattribute__(self, k)
AttributeError: 'DefaultFactoryMunch' object has no attribute 'age'
self[k] = self.default_factory()
TypeError: 'str' object is not callable

發現如果使用DefaultFactoryMunch則不能使用 not callable對象。

4. 序列化支持

Munch支持系列化為Json或者yaml格式的字符串轉換成Json對象。

from munch import Munch
import json
import yaml
munch_obj = Munch(foo=Munch(lol=True), bar=100, msg='hello')
print(json.dumps(munch_obj))
munch_obj = Munch(foo=Munch(lol=True), bar=100, msg='hello')
print(yaml.dump(munch_obj))

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved