·字典(dict) 筆記: 字典(映射)成對出現,由鍵及其相應的值組成,鍵-值對稱作項(item),字典是python中唯一內置映射類型。字典中的鍵必須是獨一無二的。 在python 2中進行拷貝需要調用copy模塊;而在python 3 中可以直接使用淺拷貝copy(),當使用深拷貝deepcop ...
·字典(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(x)) #len():查詢字典鍵-值對數 3 >>> print(x['name']) #x['']:查詢name鍵的值 jimmy >>> x['address'] = 'beijing' #x['']='value':替換address鍵對應的值 >>> print(x) {'name': 'jimmy', 'age': '25', 'address': 'beijing'} >>> del x['address'] #del x['']:刪除字典中鍵為address的項 >>> print(x) {'name': 'jimmy', 'age': '25'} #檢查字典中是否包含鍵為name的項(成員資格) >>> print('name' in x) True
@ 字典的方法
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字典的值也隨著刪除。
這是因為淺拷貝只複製了第一層數據,字典里存儲的子列表,列印出來是子列表,
在記憶體里,字典里只是存儲了子列表的記憶體地址,子列表在記憶體里是單獨存儲的。
深拷貝(deepcopy):需要導入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/ 歡迎轉載 ~