- Python3.5從零開始學
- 劉宇宙
- 2973字
- 2020-11-28 16:07:05
5.3 字典方法
像其他內建類型一樣,字典也有方法,這些方法非常有用,不過可能不像使用列表或字符串一樣頻繁使用。學習本節時可以先簡單瀏覽了解一下有哪些方法可以使用,然后在需要時回過頭來查看特定方法的具體用法。
5.3.1 clear()方法
clear()方法用于刪除字典內的所有項。
clear()方法的語法如下:
dict.clear()
此語法中dict代表指定字典,該方法不需要參數。該函數是一個原地操作(類似于list.sort)函數,沒有任何返回值(返回值為None)。
該方法使用示例如下:
>>> student={'小萌': '1001','小智': '1002','小強': '1005','小張': '1006'} >>> print('字典元素個數為:%d個' % len(student)) 字典元素個數為:4個 >>> student.clear() >>> print('字典刪除后元素個數為:%d個' % len(student)) 字典刪除后元素個數為:0個
由輸出結果可知,字典調用clear方法后整個字典內所有項都被刪除。
下面看兩個示例。
示例1:
>>> x={} >>> y=x >>> x['key']='value' >>> y {'key': 'value'} >>> x={} >>> y {'key': 'value'}
示例2:
>>> x={} >>> y=x >>> x['key']='value' >>> y {'key': 'value'} >>> x.clear() >>> y {}
兩個示例中,x和y最初對應同一個字典。示例1中,通過將x關聯到一個新的空字典對它重新賦值,這對y沒有任何影響,還關聯到原先的字典。若想清空原始字典中所有元素,則必須使用clear方法,使用clear后,y的值也被清空了。
5.3.2 copy()方法
copy()方法返回一個具有相同鍵/值對的新字典。這個方法是淺復制(shallow copy),因為值本身是相同的,而不是副本。
copy()方法的語法如下:
dict.copy()
此語法中dict代表指定字典,該方法不需要參數。返回結果為一個字典的淺復制。
該方法使用示例如下:
>>> student={’小萌’: '1001', ’小智’: '1002', ’小強’: '1005', ’小張’: '1006'} >>> st=student.copy() >>> print(’復制后得到的st為:', st) 復制后得到的st為: {’小強’:'1005',’小萌’:'1001',’小智’:'1002',’小張’:'1006'}
由輸出結果看到,使用copy方法可以將字典復制給另一個變量。
我們可以通過下面的示例了解什么是淺復制。
>>> student={’小智’: '1002', 'info':[’小張’, '1006', 'man']} >>> st=student.copy() >>> st[’小智’]='1005' >>> print(’更改copy后的st為:', st) 更改copy后的st為: {'info': [’小張’,'1006','man'],’小智’:'1005'} >>> print(’原字符串為::', student) 原字符串為:: {'info': [’小張’,'1006','man'],’小智’:'1002'} >>> st['info'].remove('man') >>> print(’刪除后st為:', st) 刪除后st為: {'info': [’小張’,'1006'],’小智’:'1005'} >>> print(’刪除后student為:', student) 刪除后student為: {'info': [’小張’,'1006'],’小智’:'1002'}
由輸出結果看到,替換副本的值時原始字典不受影響。如果修改了某個值(原地修改,不是替換),原始字典就會改變,因為同樣的值也在原字典中。以這種方式進行復制就是淺復制,而使用深復制(deep copy)可以避免該問題,此處不做講解,有興趣的讀者可以自己查找相關資料。
5.3.3 fromkeys()方法
fromkeys()方法用于創建一個新字典,以序列seq中的元素做字典的鍵,value為字典所有鍵對應的初始值。
fromkeys()方法的語法如下:
dict.fromkeys(seq[, value]))
此語法中dict代表指定字典;seq代表字典鍵值列表;value代表可選參數,設置鍵序列(seq)的值。該方法返回結果為列表。
該方法使用示例如下:
>>> seq = ('name', 'age', 'sex') >>> info = dict.fromkeys(seq) >>>print ("新的字典為 : %s" % info) 新的字典為 :{'name': None,'sex': None,'age': None} >>> info = dict.fromkeys(seq, 10) >>>print ("新的字典為 : %s" % info) 新的字典為 :{'name': 10,'sex': 10,'age': 10}
由輸出結果看出,fromkeys方法使用給定的鍵建立新字典,每個鍵默認對應的值為None。
5.3.4 get()方法
get()方法返回指定鍵的值,如果值不在字典中,就返回默認值。
get()方法的語法如下:
dict.get(key, default=None)
此語法中dict代表指定字典,key代表字典中要查找的鍵,default代表指定鍵的值不存在時返回默認值。該方法返回結果為指定鍵的值,如果值不在字典中,就返回默認值None。
該方法使用示例如下:
>>> student={’小萌’: '1001', ’小智’: '1002'} >>>print (’小萌的學號為: %s'% student.get(’小萌’)) 小萌的學號為: 1001
由輸出結果看到,get方法使用起來比較簡單。再看如下示例:
>>> st={} >>> print(st['name']) Traceback (most recent call last): File "<pyshell#166>", line 1, in <module> print(st['name']) KeyError: 'name' >>> print(st.get('name')) None >>> print('name的值為:%s' % st.get('name')) name的值為:None
由輸出結果看到,其他方法試圖訪問字典中不存在的項時會出錯,而使用get方法就不會。使用get方法訪問一個不存在的鍵時,返回None。這里可以自定義默認值,用于替換None,例如:
>>> st={} >>> print('name的值為:%s' % st.get('name', ’未指定’)) name的值為:未指定
由輸出結果看到,輸出結果中用“未指定”替代了None。
5.3.5 key in dict方法
Python字典in操作符用于判斷鍵是否存在于字典中,如果鍵在字典dict中就返回true,否則返回false。
該方法的語法如下:
key in dict
此語法中dict代表指定字典,key代表要在字典中查找的鍵。如果鍵在字典里就返回true,否則返回false。
該方法使用示例如下:
>>> student={’小萌’: '1001', ’小智’: '1002'} >>> print(’小萌在student字典中:%s'%(’小萌’ in student)) 小萌在student字典中:True >>> print(’小強在student字典中:%s'%(’小強’ in student)) 小強在student字典中:False
由輸出結果看到,已返回對應的True或False。
該方法是Python 3中的方法。在Python 2中有一個有相同功能的方法——has_key方法,has_key方法的使用方式和in不同。
5.3.6 items()方法
items()方法以列表返回可遍歷的(鍵,值)元組數組。
items()方法的語法如下:
dict.items()此語法中dict代表指定字典,該方法不需要參數。返回結果為可遍歷的(鍵/值)元組數組。
該方法使用示例如下:
>>> student={’小萌’: '1001', ’小智’: '1002'} >>> print(’調用items方法的結果:%s'% student.items()) 調用items方法的結果:dict_items([(’小萌’, '1001'), (’小智’, '1002')])
由輸出結果看到,返回結果為一個元組數組。
在Python 2中提供了一個iteritems方法,該方法和items方法的作用大致相同,但是iteritems方法返回的是一個迭代器對象,而不是列表。在Python 3中沒有iteritems方法。
5.3.7 keys()方法
keys()方法以列表返回一個字典所有鍵。
keys()方法的語法如下:
dict.keys()
此語法中dict代表指定字典,該方法不需要參數。返回結果為一個字典所有鍵。
該方法使用示例如下:
>>> student={’小萌’: '1001', ’小智’: '1002'} >>> print(’字典student所有鍵為:%s'% student.keys()) 字典student所有鍵為:dict_keys([’小萌’, ’小智’])
由輸出結果看到,返回的是一個元組數組,數組中包含字典所有鍵。
5.3.8 setdefault()方法
setdefault()方法和get()方法類似,用于獲得與給定鍵相關聯的值。如果鍵不存在于字典中,就會添加鍵并將值設為默認值。
setdefault()方法的語法如下:
dict.setdefault(key, default=None)
此語法中dict代表指定字典,key代表查找的鍵值,default代表鍵不存在時設置的默認鍵值。該方法沒有任何返回值。
該方法使用示例如下:
>>> student={’小萌’: '1001', ’小智’: '1002'} >>> print(’小強的鍵值為:%s'% student.setdefault(’小強’)) 小強的鍵值為:None >>> print(’小智的鍵值為:%s'% student.setdefault(’小智’)) 小智的鍵值為:1002 >>> print('student字典新值為:%s'% student) student字典新值為:{’小強’: None, ’小萌’: '1001', ’小智’: '1002'}
由輸出結果看到,當鍵不存在時,setdefault方法返回默認值并更新字典;如果鍵存在,就返回與其對應的值,不改變字典。和get一樣,默認值可以選擇,如果不設定就使用None,如果設定就使用設定的值,例如:
>>> student={’小萌’: '1001', ’小智’: '1002'} >>> print(’小強的鍵值為:%s'% student.setdefault(’小強’)) 小強的鍵值為:None >>> print(’小zhang的鍵值為:%s'% student.setdefault(’小zhang', '1006')) 小zhang的鍵值為:1006
由輸出結果看到,小強沒有設置值,使用的是默認值,輸出鍵值為None;小zhang設置的默認值是1006,輸出鍵值為1006。
5.3.9 update()方法
update()方法用于把字典dict2的鍵/值對更新到dict里。
update()方法的語法如下:
dict.update(dict2)
此語法中dict代表指定字典,dict2代表添加到指定字典dict里的字典。該方法沒有任何返回值。
該方法使用示例如下:
>>> student={’小萌’: '1001', ’小智’: '1002'} >>> student2={’小李’:'1003'} >>> print(’原student字典為:%s'% student) 原student字典為:{’小萌’: '1001', ’小智’: '1002'} >>> student.update(student2) >>> print(’新student字典為:%s'% student) 新student字典為:{’小李’: '1003', ’小萌’: '1001', ’小智’: '1002'} >>> student3={’小李’:'1005'} >>>student.update(student3) #對相同項覆蓋 >>> print(’新student字典為:%s'% student) 新student字典為:{’小李’: '1005', ’小萌’: '1001', ’小智’: '1002'}
由輸出結果看到,提供的字典中的項被添加到舊字典中,如果有相同的鍵就會覆蓋。
5.3.10 values()方法
values()方法以列表形式返回字典中所有值。與返回鍵的列表不同,返回的列表中可以包含重復的元素。
values()方法的語法如下:
dict.values()此語法中dict代表指定字典,該方法不需要參數。返回結果為字典中的所有值。
該方法使用示例如下:
>>> student={’小萌’: '1001', ’小智’: '1002', ’小李’:'1001'} >>> print('student字典所有值為:%s'% list(student.values())) student字典所有值為:['1001', '1001', '1002']
由輸出結果看到,返回的列表中包含重復的元素。
- TypeScript入門與實戰
- Python量化投資指南:基礎、數據與實戰
- Python數據分析入門與實戰
- Microsoft Application Virtualization Cookbook
- Go語言高效編程:原理、可觀測性與優化
- SQL for Data Analytics
- 64位匯編語言的編程藝術
- Visual Basic程序設計習題解答與上機指導
- Mastering JavaScript Design Patterns(Second Edition)
- Express Web Application Development
- 區塊鏈技術與應用
- Scratch3.0趣味編程動手玩:比賽訓練營
- Scala Functional Programming Patterns
- CodeIgniter Web Application Blueprints
- 程序員的英語