·字典(dict)
筆記:
- 字典(對映)成對出現,由鍵及其相應的值組成,鍵-值對稱作項(item),字典是python中唯一內建對映型別。字典中的鍵必須是獨一無二的。
- 在python 2中進行拷貝需要呼叫copy模組;而在python 3 中可以直接使用淺拷貝copy(),當使用深拷貝deepcopy(),則需要呼叫copy模組。
- 相比於檢查列表是否包含指定的值,檢查字典是否包含指定的鍵效率更高。
@ 建立一個字典
使用鍵–值對序列建立字典(鍵–值在元組中組成列表):
item = [(`name`,`jimmy`),(`age`,`25`),(`address`,`fujian`)] x = dict(item) print(x) 列印結果:{`name`: `jimmy`, `age`: `25`, `address`: `fujian`}
使用關鍵字建立字典:
d = dict(name=`jimmy`,age=25) print(d) 列印結果:{`name`: `jimmy`, `age`: 25}
@ 字典的基本操作
字典的基本操作:
x ={`name`:`jimmy`,`age`:`25`,`address`:`fujian`} print(`len()查詢字典鍵-值對數:`,len(x)) print("x[`name`]查詢name鍵的值:",x[`name`]) x[`address`] = `beijing` #x[``]=`value`:替換address鍵對應的值 del x[`address`] #del x[``]:刪除字典中鍵為address的項 print(`檢查字典中是否包含鍵為name的項(成員資格):`,`name` in x)
@ 字典的方法
fromkeys():建立一個新字典,其中包含指定的鍵,值預設為None
x = dict.fromkeys([x for x in range(1,11)]) #建立10個項(鍵-值對) print(x)
列印結果: {1: None, 2: None, 3: None, 4: None, 5: None, 6: None, 7: None, 8: None, 9: None, 10: None}
淺拷貝(copy):
>>> x ={`name`:`jimmy`,`age`:`25`,`address`:[`fujian`,`beijing`]} >>> y = x.copy() >>> print("x的ID為:",id(x)) x的ID為: 2394409585904 >>> print("y的ID為:",id(y)) y的ID為: 2394409586120 >>> y[`age`] = 20 >>> print(x) {`name`: `jimmy`, `age`: `25`, `address`: [`fujian`, `beijing`]} >>> print(y) {`name`: `jimmy`, `age`: 20, `address`: [`fujian`, `beijing`]}
#結論:x和y指向的記憶體地址不同,所以兩個字典的值不會相互影響 >>> x[`address`].remove(`beijing`) >>> print(x) {`name`: `jimmy`, `age`: `25`, `address`: [`fujian`]} >>> print(y) {`name`: `jimmy`, `age`: 20, `address`: [`fujian`]}
#結論:刪除x字典的beijing時,y字典的值也隨著刪除。
這是因為淺拷貝只複製了第一層資料,字典裡儲存的子列表,列印出來是子列表,
在記憶體裡,字典裡只是儲存了子列表的記憶體地址,子列表在記憶體裡是單獨儲存的。
簡單的來說:x、y指向不同的地址,但是它們共用子列表中的值。
深拷貝(deepcopy):python3 中需要匯入copy模組
>>>from copy import deepcopy #匯入模組 >>> x ={`name`:`jimmy`,`age`:`25`,`address`:[`fujian`,`beijing`]} >>> y = deepcopy() >>> print("x的ID為:",id(x)) x的ID為: 2394409585904 >>> print("y的ID為:",id(y)) y的ID為: 2394409586120 >>> y[`age`] = 20 >>> print(x) {`name`: `jimmy`, `age`: `25`, `address`: [`fujian`, `beijing`]} >>> print(y) {`name`: `jimmy`, `age`: 20, `address`: [`fujian`, `beijing`]} #結論:x和y指向的記憶體地址不同,所以兩個字典的值不會相互影響 >>> x[`address`].remove(`beijing`) >>> print(x) {`name`: `jimmy`, `age`: `25`, `address`: [`fujian`]} >>> print(y) {`name`: `jimmy`, `age`: 20, `address`: [`fujian`, `beijing`]} #結論:刪除x字典的beijing時,y字典的值不會被刪除。這是因為深複製把子列表也複製了一份
字典方法集合:
>>> x = {`name`:`jimmy`,`age`:`18`,`address`:`Fujian`,`phone`:`123456`} >>> y = {`age`:`100`} >>> print(x.get(`name`,`not found it`))
jimmy #get():查詢x字典中name鍵的值,返回其鍵的值。它還提供預設值;x中沒有name時,返回指定值not found it(沒有指定則預設為None)
>>> print(x.setdefault(`favorire`,`apple`))
apple #setdefault():查詢x字典中favorite鍵的值,返回其鍵的值;如果沒有找到鍵,將在字典中新增一個鍵-值對(如果沒有指定則預設為None)
>>> print(x) {`name`: `jimmy`, `age`: `18`, `address`: `Fujian`, `phone`: `123456`, `favorire`: `apple`} >>> print("item()方法:",x.items()) #items():返回所有字典項(鍵值對)的列表 item()方法: dict_items([(`name`, `jimmy`), (`age`, `18`), (`address`, `Fujian`), (`phone`, `123456`), (`favorire`, `apple`)]) >>> print("keys()方法:",x.keys()) #keys():返回字典中的鍵 keys()方法: dict_keys([`name`, `age`, `address`, `phone`, `favorire`]) >>> print("values()方法:",x.values()) #values():返回字典中的值 values()方法: dict_values([`jimmy`, `18`, `Fujian`, `123456`, `apple`]) >>> print("pop()方法:",x.pop(`name`)) #pop(): 獲取指定鍵相關聯的值,並將該鍵-值對從字典中刪除。 pop()方法: jimmy >>> print(x) {`age`: `18`, `address`: `Fujian`, `phone`: `123456`, `favorire`: `apple`} >>> print("popitem()方法:",x.popitem()) #popitem():隨機彈出一個項鍵值對(字典無序) popitem()方法: (`favorire`, `apple`) >>> print(x) {`age`: `18`, `address`: `Fujian`, `phone`: `123456`} >>> print("update()方法:",x.update(y)) #update():使用一個字典來更新另一個字典,如果字典中沒有,將新增一個項 update()方法: None >>> print(x) {`age`: `100`, `address`: `Fujian`, `phone`: `123456`} >>> print("clear()方法:",x.clear()) #刪除所有字典項 clear()方法: None >>> print(x) {}
@ 淺拷貝應用:
假設tom和jimmy分別持有信用卡主卡和副卡,共享額度10000,兩個人都可以使用信用卡消費。
>>> creditcard = [`name`,[`saving`,10000]] >>> tom = creditcard.copy() >>> jimmy = creditcard.copy() >>> tom[0] = `tom` >>> jimmy[0] = `jimmy` >>> tom[1][1] = 5000 #假設tom消費5000元 >>> print(`信用卡餘額:`,creditcard) 信用卡餘額: [`name`, [`saving`, 5000]] >>> print(`tom的剩餘額度`,tom) tom的剩餘額度 [`tom`, [`saving`, 5000]] >>> print(`jimmy剩餘額度`,jimmy) jimmy剩餘額度 [`jimmy`, [`saving`, 5000]]
end~
****** 幾米花的Python ****** 部落格主頁:https://www.cnblogs.com/jimmy-share/ 歡迎轉載 ~