【Python從入門到精通】(七)Python字典(dict)讓人人都

nt1979發表於2021-09-09

您好,我是碼農飛哥,感謝您閱讀本文,歡迎一鍵三連哦
本文主要介紹Python資料型別中的字典(dict),我們們一次把字典聊個透徹。
乾貨滿滿,建議收藏,需要用到時常看看。 小夥伴們如有問題及需要歡迎私信或者留言給我哦~ ~ ~。

字典是什麼?

列表(list)和元組(tuple)這兩種非常常用的序列。今天要介紹另外一種使用非常廣泛的序列—字典(dict)。小夥伴們哪怕沒有接觸過dict這個資料型別,也一定聽說過字典這個名詞---->那大名鼎鼎的新華字典,不會沒有人用過吧!!!
圖片描述
看到這圖片,是不是勾起了兒時上學的回憶啦。哈哈哈哈
回想一下我們是怎麼透過新華字典查詢一個漢字的?是不是根據拼音去查詢漢字的,具體查詢細節相信大家都懂的。把查詢字典的過程對映到同樣道理Python中的字典(dict)就是透過鍵(key)去找值(value)的,字典(dict)底層的資料結構是雜湊表的結構。

字典怎麼用?

說完了字典的基本概念,接下來就說說字典該如何使用,只有能用起來的東西才是好東西。本章將介紹字典的增刪改查。字典的基本結構是:

{'key1':'value1', 'key2':'value2', ..., 'keyn':valuen}

其中key1~keyn表示鍵,value1~valuen表示鍵所對應的值。需要注意的是字典中所有的鍵都是唯一的(每個人都是獨一無二的),有且僅有一個鍵可以為空值None,而且只能用不可變的型別,比如字串,整數,小數,元組。而值可以是任何Python支援的資料型別且值可以為空值None,為空值None的值的數量不限。
圖片描述

建立一個字典

建立字典的方式有很多種,下面羅列幾種比較常見的方法。
第一種:使用 {} 符號來建立字典,其語法結構是dictname={'key1':'value1', 'key2':'value2', ..., 'keyn':valuen}
第二種:使用fromkeys方法,其語法結構是dictname = dict.fromkeys(list,value=None), 其中,list參數列示字典中所有鍵的列表(list),value參數列示預設值,如果不寫則為所有的值都為空值None。
第三種:使用dict方法,其分為四種情況:

  1. dict() -> 建立一個空字典
  2. dict(mapping) -> 建立一個字典,初始化時其鍵值分別來自於mapping中的key,value。
  3. dict(iterable) -> 建立一個字典,初始化時會遍歷iterable得到其鍵值。
for k, v in iterable:
                d[k] = v
  1. dict(**kwargs) -> **kwargs 是可變函式,其呼叫的語法格式是:dict(key1=value1,key2=value2,...keyn=valuen),例如:dict(name='碼農飛哥', age=17, weight=63)
    這三種建立字典的方式都介紹完了,下面就來看看示例說明吧:
#1. 建立字典
d = {'name': '碼農飛哥', 'age': 18, 'height': 185}
print(d)
list = ['name', 'age', 'height']
# 2. fromkeys方法
dict_demo = dict.fromkeys(list)
dict_demo1 = dict.fromkeys(list, '測試')
print(dict_demo)
print(dict_demo1)
# 透過dict()對映建立字典,傳入列表或者元組
demo = [('name', '碼農飛哥'), ('age', 19)]
dict_demo2 = dict(demo)
print(dict_demo2)
dict_demo21 = dict(name='碼農飛哥', age=17, weight=63)
print(dict_demo21)

執行結果是:

{'name': '碼農飛哥', 'age': 18, 'height': 185}
{'name': None, 'age': None, 'height': None}
{'name': '測試', 'age': '測試', 'height': '測試'}
{'name': '碼農飛哥', 'age': 19}
{'name': '碼農飛哥', 'age': 17, 'weight': 63}

字典的訪問

說完了字典的建立之後,接著就讓我們來看看字典的訪問。字典不同於列表和元組,字典中的元素不是依次儲存在記憶體區域中的;所以,字典中的元素不能透過索引來訪問,只能是透過鍵來查詢對應的值。 ,其有兩種不同的寫法。

  1. 第一種方式的語法格式是dictname[key] ,其中dictname表示字典的名稱,key表示指定的鍵。如果指定的鍵不存在的話,則會報KeyError 錯誤
  2. 第二種方式的語法格式是dictname.get(key),其中dictname表示字典的名稱,key表示指定的鍵。如果指定的鍵不存在的話,則會返回None。
    舉個例子說明下吧,下面程式碼的意思是根據鍵名為name 查詢其對應的值。
dict_demo5 = {'name': '碼農飛哥', 'age': 18, 'height': 185}
print(dict_demo5['name'])
print(dict_demo5.get('name'))
print('鍵不存在的情況返回結果=',dict_demo5.get('test'))

執行結果是:

碼農飛哥
碼農飛哥
鍵不存在的情況返回結果= None

圖片描述

新增和修改鍵值對

新增鍵值對的方法很簡單,其語法結構是dictname[key]=value,如果key在字典中不存在的話,則會新增一個鍵值對。如果key在字典中存在的話,則會更新原來鍵所對應的值。依然是舉例說明下:本例中程式碼的結果是增加鍵值對 sex='男',把鍵height對應的值改成了190

# 新增鍵值對
dict_demo6 = {'name': '碼農飛哥', 'age': 18, 'height': 185}
dict_demo6['sex'] = '男'
print('新增鍵值對的結果={0}'.format(dict_demo6))
# 修改鍵值對
dict_demo6['height'] = 190
print('修改鍵值對的結果={0}'.format(dict_demo6))

執行結果是:

新增鍵值對的結果={'age': 18, 'name': '碼農飛哥', 'height': 185, 'sex': '男'}
修改鍵值對的結果={'age': 18, 'name': '碼農飛哥', 'height': 190, 'sex': '男'}

當然修改和刪除鍵值對也可以透過update方法來實現,其具體的語法格式是:dictname.update(dict) ,其中,dictname為字典的名稱,dict為要修改的字典的值。該方法既可以新增鍵值對,也可以修改鍵值對。 該方法沒有返回值,即是在原字典上修改元素的。下面例子中就是將鍵name的值改成了飛飛1024,鍵age對應的值改成了25。並新增了鍵值對 like=學習

# update方法
dict_demo7 = {'name': '碼農飛哥', 'age': 18, 'height': 185, 'width': 100}
dict_demo7.update({'name': '飛飛1024', 'age': 25, 'like': '學習'})
print('update方法返回結果={}', dict_demo7)

執行結果為:

update方法返回結果={} {'height': 185, 'like': '學習', 'width': 100, 'name': '飛飛1024', 'age': 25}

刪除鍵值對

刪除鍵值對的方法有三種:

  1. 第一種是del dictname[key],使用del關鍵字,其中dictname為字典的名稱,key為要刪除的鍵。如果鍵不存在的話則會報KeyError錯誤。
  2. 第二種方式是透過pop方法,其語法結構是:dictname.pop(key)。該方法是用於刪除指定鍵值對,沒有返回值,如果key不存在的話不會報錯。
  3. 第三種方式是透過popitem方法,其語法結構是:dictname.popitem()。該方法用於刪除字典中最後一個鍵值對。舉例說明下吧:
dict_demo10 = {'name': '碼農飛哥', 'age': 18, 'height': 185, 'width': 100}
# 刪除鍵值對
del dict_demo6['height']
print('刪除鍵height對之後的結果=', dict_demo6)
# pop()方法和popitem()方法
dict_demo10.pop('width')
print('pop方法呼叫刪除鍵width之後結果=', dict_demo10)
dict_demo10 = {'name': '碼農飛哥', 'age': 18, 'height': 185, 'width': 100}
dict_demo10.popitem()
print('popitem方法呼叫之後結果=', dict_demo10)

執行結果是:

刪除鍵height對之後的結果= {'name': '碼農飛哥', 'sex': '男', 'age': 18}
pop方法呼叫刪除鍵width之後結果= {'name': '碼農飛哥', 'height': 185, 'age': 18}
popitem方法呼叫之後結果= {'width': 100, 'name': '碼農飛哥', 'height': 185}

可以看出popitem方法刪除的鍵並不是最後一個鍵width,而是鍵age。而且刪除之後字典中元素的順序都改變了。

其他的方法說明:

  1. 判斷指定鍵在字典中是否存在,其語法結構是:key in dictname,其中key要查詢的鍵,dictname是字典名稱。in 表示查詢鍵是否在字典中存在,如果是查詢鍵是否不再字典中存在,則需要用 not in關鍵字。舉個例子:
dict_demo6 = {'name': '碼農飛哥', 'age': 18, 'height': 185}
print('判斷鍵name是否存在的結果是=', ('name' in dict_demo6))
  1. 輸出字典中所有的鍵,呼叫的方法是keys(),其語法結構是:dictname.keys()。其中dictname為字典名稱。
  2. 輸出字典中所有的值,呼叫的方法是values(),其語法結構是:dictname.values()
  3. 輸出字典中所有的鍵值對,呼叫的方法是items(),其語法結構是:dictname.items()
    舉個例子說明下吧:
dict_demo7 = {'name': '碼農飛哥', 'age': 18, 'height': 185, 'width': 100}
print('keys方法返回結果=', dict_demo7.keys())
print('value方法返回結果=', dict_demo7.values())
print('item方法返回結果=', dict_demo7.items())

輸出結果是:

keys方法返回結果= dict_keys(['width', 'name', 'height', 'age'])
value方法返回結果= dict_values([100, '碼農飛哥', 185, 18])
item方法返回結果= dict_items([('width', 100), ('name', '碼農飛哥'), ('height', 185), ('age', 18)])

使用字典格式化字串

在序列那篇文章我們介紹了可以透過順序轉換說明符,其語法格式是:{num},num是編號,從0開始依次遞增 搭配format 方法來格式化字串。但是這種方法也是有弊端的,就是當字串中有大量轉換說明符時,就不方便使用了。

str = '碼農飛哥{0},你一定會有={1}'
print(str.format('加油', '出息'))

輸出結果是碼農飛哥加油,你一定會有=出息 ,這裡的傳參要嚴格按照順序傳參。
這時候我們可以透過字典來格式化字串,其語法格式是%(name)s 其中%是固定的寫法,name對應字典中的key,s 表示字典鍵為name的值的型別,如果是字串則是s。最後要透過str%dictname來輸出格式化後的字串,其中str是原始的字串,dictname是字典的名稱。舉個例子吧!

str = '碼農飛哥的第=%(num)s篇=%(article)s,希望=%(reader)s喜歡'
dict_demo12 = {'num': 250, 'article': '文章', 'reader': '讀者們'}
print(str % dict_demo12)

執行結果是碼農飛哥的第=250篇=文章,希望=讀者們喜歡
圖片描述

總結

本文詳細介紹了Python字典的基本概念和詳細用法,希望對讀者朋友們有所幫助。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4822/viewspace-2797491/,如需轉載,請註明出處,否則將追究法律責任。

相關文章