【Python從入門到精通】(七)Python字典(dict)讓人人都
您好,我是碼農飛哥,感謝您閱讀本文,歡迎一鍵三連哦。
本文主要介紹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方法,其分為四種情況:
- dict() -> 建立一個空字典
- dict(mapping) -> 建立一個字典,初始化時其鍵值分別來自於mapping中的key,value。
- dict(iterable) -> 建立一個字典,初始化時會遍歷iterable得到其鍵值。
for k, v in iterable:
d[k] = v
-
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}
字典的訪問
說完了字典的建立之後,接著就讓我們來看看字典的訪問。字典不同於列表和元組,字典中的元素不是依次儲存在記憶體區域中的;所以,字典中的元素不能透過索引來訪問,只能是透過鍵來查詢對應的值。 ,其有兩種不同的寫法。
- 第一種方式的語法格式是
dictname[key]
,其中dictname表示字典的名稱,key表示指定的鍵。如果指定的鍵不存在的話,則會報KeyError 錯誤。 - 第二種方式的語法格式是
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}
刪除鍵值對
刪除鍵值對的方法有三種:
- 第一種是
del dictname[key]
,使用del關鍵字,其中dictname為字典的名稱,key為要刪除的鍵。如果鍵不存在的話則會報KeyError錯誤。 - 第二種方式是透過pop方法,其語法結構是:
dictname.pop(key)
。該方法是用於刪除指定鍵值對,沒有返回值,如果key不存在的話不會報錯。 - 第三種方式是透過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。而且刪除之後字典中元素的順序都改變了。
其他的方法說明:
- 判斷指定鍵在字典中是否存在,其語法結構是:
key in dictname
,其中key要查詢的鍵,dictname是字典名稱。in 表示查詢鍵是否在字典中存在,如果是查詢鍵是否不再字典中存在,則需要用not in
關鍵字。舉個例子:
dict_demo6 = {'name': '碼農飛哥', 'age': 18, 'height': 185}
print('判斷鍵name是否存在的結果是=', ('name' in dict_demo6))
- 輸出字典中所有的鍵,呼叫的方法是
keys()
,其語法結構是:dictname.keys()
。其中dictname為字典名稱。 - 輸出字典中所有的值,呼叫的方法是
values()
,其語法結構是:dictname.values()
。 - 輸出字典中所有的鍵值對,呼叫的方法是
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Python從入門到精通Python
- Python dict(字典)Python
- 用python寫遊戲 - 從入門到精通16Python遊戲
- Python小白菜鳥從入門到精通Python
- Python 從入門到進階之路(七)Python
- Flask框架從入門到精通之Response(七)Flask框架
- Python中字典dictPython
- Python字典dict用法Python
- python--字典dictPython
- Docker從入門到精通(七)——容器資料共享Docker
- Python 入門到精通(5):Python運算子Python
- 【Python從入門到精通】(二十五)Python多程式的使用Python
- 自學Python需要多長時間從入門到精通?Python
- 用Python和Pygame寫遊戲從入門到精通(17)PythonGAM遊戲
- 用Python和Pygame寫遊戲-從入門到精通(21)PythonGAM遊戲
- 用Python和Pygame寫遊戲從入門到精通(14)PythonGAM遊戲
- 用Python和Pygame寫遊戲-從入門到精通(15)PythonGAM遊戲
- 用Python和Pygame寫遊戲從入門到精通(16)PythonGAM遊戲
- 用Python和Pygame寫遊戲從入門到精通(18)PythonGAM遊戲
- 用Python和Pygame寫遊戲-從入門到精通(19)PythonGAM遊戲
- 用Python和Pygame寫遊戲-從入門到精通(20)PythonGAM遊戲
- 用Python和Pygame寫遊戲-從入門到精通(22)PythonGAM遊戲
- 用Python和Pygame寫遊戲-從入門到精通(3)PythonGAM遊戲
- 用Python和Pygame寫遊戲-從入門到精通(4)PythonGAM遊戲
- 用Python和Pygame寫遊戲-從入門到精通(5)PythonGAM遊戲
- 用Python和Pygame寫遊戲-從入門到精通(6)PythonGAM遊戲
- 用Python和Pygame寫遊戲-從入門到精通(7)PythonGAM遊戲
- 用Python和Pygame寫遊戲-從入門到精通(8)PythonGAM遊戲
- 用Python和Pygame寫遊戲-從入門到精通(9)PythonGAM遊戲
- 用Python和Pygame寫遊戲-從入門到精通(10)PythonGAM遊戲
- 用Python和Pygame寫遊戲-從入門到精通(11)PythonGAM遊戲
- 用Python和Pygame寫遊戲-從入門到精通(1)PythonGAM遊戲
- 用Python和Pygame寫遊戲-從入門到精通(2)PythonGAM遊戲
- 用Pygame和Python做遊戲-從入門到精通(1)GAMPython遊戲
- 用Pygame和Python做遊戲-從入門到精通(4)GAMPython遊戲
- 用Pygame和Python做遊戲-從入門到精通(7)GAMPython遊戲
- 用Pygame和Python做遊戲-從入門到精通(5)GAMPython遊戲
- 用Pygame和Python做遊戲-從入門到精通11GAMPython遊戲