python內建物件型別(四)序列之dict字典
字典的相關定義
Python 字典是一種無序的、可變的序列,元素以“鍵值對(key-value)”形式儲存
而列表(list)和元組(tuple)都是有序的序列(這裡的有序不是說他們的元素大小是有序排列的的,而是說它們的元素在記憶體是連續挨著存放的,通常將索引值為0的元素稱為第一個元素。)
字典型別是 Python 中唯一的對映型別
一、字典的建立
鍵必須不同,但是不同的鍵的值可以一樣
鍵只能是整數、字串或者元組這些唯一和不可變的型別,因此列表不能做鍵
值可以是 Python 支援的任意資料型別和自定義型別。
需要注意的是字典裡面沒有要求所有的key或者所有的value 的型別都一樣,即不要求所有的鍵的型別都一樣,也不要求所有val的值都一樣,這一點和列表、元組一樣,即不要求所存的資料的型別一致(是個筐 什麼都能裝)
鍵或者值是字串/字元時需要有引號(單雙都可以)
方法一、使用 { } 建立字典
鍵和值之間使用冒號:分隔,相鄰元素之間使用逗號,分隔,所有元素放在大括號{ }中
#使用字串作為key
scores = {'數學': 95, '英語': 92, '語文': 84}
print(scores)
使用元組和數字作為key 兩個key的型別分別是元組和數字 val分別是字串和列表
dict1 = {(20, 30): 'great', 30: [1,2,3]}
print(dict1)
#建立空元組
dict2 = {}
print(dict2)
執行結果
{'數學': 95, '英語': 92, '語文': 84}
{(20, 30): 'great', 30: [1, 2, 3]}
{}
方法二、 內建函式dict()建立
通過dict()函式建立字典的寫法可以如下
方法三、 dict 字典型別提供的 fromkeys() 方法建立帶有預設值的字典
具體格式為:
dictname = dict.fromkeys(list,value=None)
list 參數列示字典中所有鍵的列表(list)
value 參數列示預設值,如果不寫則為空值 None
knowledge = ['語文', '數學', '英語']
scores = dict.fromkeys(knowledge, 60)
print(scores)
執行結果
{'語文': 60, '英語': 60, '數學': 60}
該方法通常用於字典的初始化
二、字典的訪問
方法一、通過鍵訪問 :dictname[key]
訪問時鍵必須是存在的否則會丟擲異常,程式終止
列表和元組是通過下標來訪問元素,而字典通過鍵來訪問對應的值,因為字典中的元素是無序的,每個元素的位置都不固定,所以字典也不能像列表和元組那樣,採用切片的方式一次性訪問多個元素。
方法二、通過dict的get(key)方法訪問(推薦):dictname.get(key[,default])
當指定的鍵不存在時不會丟擲異常
dictname 表示字典變數的名字;key 表示指定的鍵;default 用於指定要查詢的鍵不存在時,此方法返回的預設值,如果不手動指定,會返回 None,如果想明確地提示該鍵不存在,那麼可以手動設定 get() 的第二個引數
get(key)方法返回對應key 的值 當key不存在返回系統預設的None或者我們自己指定的第二個引數get不會修改原字典
a = dict(two=0.65, one=88, three=100, four=-59)
print( a.get('one') )
print( a.get('five', '該鍵不存在') )
del(a);
執行結果
88
該鍵不存在
區分dict的setdefault(key[,default])方法 在key不存在時會修改原來的字典
若key存在返回其值
若key不存在且沒有指定預設值在字典中插入<key,None>鍵值對
若key不存在且指定了預設值defaultValue在字典中插入<key,defaultValue>鍵值對
Python 自帶垃圾回收功能,會自動銷燬不用的字典,所以一般不需要通過 del 來刪除
三、字典的基本操作
字典是可變序列 因此可以:
1、dictname[key] = value:向現有字典中新增新的鍵值對,key必須在現有鍵中不存在
也可以使用字典提供的update()方法
2、修改現有字典中的鍵值對,這裡指的是修改值(value)鍵不可修改。
字典中各元素的鍵必須是唯一的,因此,如果新新增元素的鍵與已存在元素的鍵相同,那麼鍵所對應的值就會被新的值替換掉,以此達到修改元素值的目的
也可以使用字典提供的pop(key)方法
a = {'數學': 95, '語文': 89, '英語': 90}
print(a)
a['語文'] = 100
print(a)
3、del dictName[key] 刪除字典中鍵為key的鍵值對
4、key in dicName 檢查某個鍵key是否在字典中 注意只能檢查key是否存在 不能檢查val,判斷現有字典中是否存在指定的鍵值對。
5、len(dicName) 求字典中鍵值對的個數
四、字典的常用方法
1、get(key[,default]):獲取key的val或預設值
2、setdefault(key[,default]):獲取key的val或新增預設鍵值對
3、update():增加鍵值對
如果被更新的字典中己包含對應的鍵值對,那麼原 value 會被覆蓋
如果被更新的字典中不包含對應的鍵值對,則該鍵值對被新增進去
傳入的引數可以是一個字典;也可以是一個元組或列表,而它們中的元素又是隻包含兩個元素的元組或列表,這和通過dict建立列表是一致的
a = {'one': 1, 'two': 2, 'three': 3}
a.update({'one':4.5, 'four': 9.3})
print(a)
a.update([('course','語文'),('name','Eniac'),(10,'me')]);
print(a)
執行結果
{'one': 4.5, 'two': 2, 'three': 3, 'four': 9.3} 修改one 新增four
{'one': 4.5, 'two': 2, 'three': 3, 'four': 9.3,
'course': 'english', 'name': 'Eniac', 10: 1}
傳入列表 列表元素是元組 各個元組的元素型別(key和val)不一樣
4、pop(key[,d]):刪除鍵值對
若key存在,刪除鍵值對並返回該key對應的val
若key不存在且給出了引數d 返回d
若key不存在且沒有給出了引數d程式異常終止KeyError
5、popitem() 刪除字典最後一對鍵值對並返回該鍵值對 若字典為空異常終止KeyError
該方法在python3.6以後適用,之前是隨機刪除一對鍵值對,需要注意的是即使如此字典也不是有序的,這裡所指的最後一個是指字典建立時鍵值對新增進字典的順序(即儲存鍵值對的底層資料結構的最後一個)
6、獲取字典中的特定資料的三個方法:
keys() 方法用於返回字典中的所有鍵(key)
values() 方法用於返回字典中所有鍵對應的值(value)
items() 用於返回字典中所有的鍵值對(key-value)
7、copy() :返回一個字典的拷貝,也即返回一個具有相同鍵值對的新字典,
copy() 方法所遵循的拷貝原理既有深拷貝,也有淺拷貝。
拿拷貝字典 a 為例,copy() 方法只會對最表層的鍵值對進行深拷貝,也就是說,它會再申請一塊記憶體用來存放 {‘one’: 1, ‘two’: 2, ‘three’: []};而對於某些列表型別的值來說,此方法對其做的是淺拷貝,也就是說,b 中的 [1,2,3] 的值不是自己獨有,而是和 a 共有。
a = {'one': 1, 'two': 2, 'three': [1,2,3]}
b = a.copy()
向 a 中新增新鍵值對,由於b已經提前將 a 所有鍵值對都深拷貝過來,因此 a 新增新鍵值對,不會影響b。
a['four']=100
print(a)
print(b)
由於 b 和 a 共享[1,2,3](淺拷貝),因此移除 a 中列表中的元素,也會影響 b。
這裡鍵three是一個列表,remove(val)刪除列表中特定值為val的元素 區分列表的pop(index)刪除
a['three'].remove(1)
print(a)
print(b)
執行結果
{'one': 1, 'two': 2, 'three': [1, 2, 3], 'four': 100}
{'one': 1, 'two': 2, 'three': [1, 2, 3]} b沒變
{'one': 1, 'two': 2, 'three': [2, 3], 'four': 100} a b都變了
{'one': 1, 'two': 2, 'three': [2, 3]}
相關文章
- Python - 基礎資料型別 dict 字典Python資料型別
- Python 內建型別 dict, list 執行緒安全嗎Python型別執行緒
- Python基本資料型別之dictPython資料型別
- Python dict(字典)Python
- python之字典(dict)基礎篇Python
- Python中字典dictPython
- Python字典dict用法Python
- python--字典dictPython
- python基礎之字典dict和集合setPython
- python-資料型別之字典Python資料型別
- dict字典常用操作(python)Python
- Python內建資料型別Python資料型別
- 1.1.4 python基本資料型別之字典Python資料型別
- python字典dict操作方法Python
- python之 序列與字典遍歷Python
- Python中內建的NotImplemented型別Python型別
- 全網最適合入門的物件導向程式設計教程:36 Python的內建資料型別-字典物件程式設計Python資料型別
- python序列資料型別之序列資料的基本操作Python資料型別
- 易被忽略的Python內建型別Python型別
- Python學習 —— 內建資料型別Python資料型別
- Python基礎學:內建型別(2)Python型別
- python 中字典dict如何新增元素?Python
- Python中內建的字典函式Python函式
- python 字典內建方法get的使用Python
- Python __dict__屬性:檢視物件內部所有屬性名和屬性值組成的字典Python物件
- python字典鍵的特性及字典內建函式&方法Python函式
- Python中容易被忽略的內建型別Python型別
- 探索 Python(1): Python 的內建數值型別Python型別
- Python學習四之變數型別Python變數型別
- dart系列之:dart語言中的內建型別Dart型別
- Python 序列型別以及函式引數型別Python型別函式
- dict(字典)的常用方法
- 2.1.2 Python物件導向之反射以及內建方法Python物件反射
- python內建資料型別:列表和元組Python資料型別
- python基礎之序列型別的方法——列表&元組Python型別
- Go 複合型別之字典型別介紹Go型別
- Python 字典 dict 獲取索引 轉化為 listPython索引
- 全網最適合入門的物件導向程式設計教程:31 Python的內建資料型別-物件Object和型別Type物件程式設計Python資料型別Object