python3.5修煉手冊10
字典
字典的使用
在python中對字典進行了構造,讓我們可以輕松的查到某個特定的鍵(類似拼音或筆畫索引),從而通過鍵找到對應的值(類似具體某個字)。
創建和使用字典
字典的創建格式如下
a={key1:value1,key2:value2}
空字典的創建
b={}
註意:在創建字典的的時候鍵(key)必須唯一的,但值(value)不必。值可以取任何數據類型,鍵必須是不可變的,如字符串、數字或元組。
dict函數
dict函數 可以通過其他映射(如其他字典)或鍵/值序列對建立字典。
例如:
student=[(‘name‘,‘杜宇恒‘),(‘number‘,‘666‘)] detai=dict(student) print(‘學生詳細信息:‘,detai) print(‘學生姓名:‘,detai[‘name‘]) print(‘學生學號:‘,detai[‘number‘])
C:\python\python.exe C:/python.py/zidian.py
學生詳細信息: {‘name‘: ‘杜宇恒‘, ‘number‘: ‘666‘}
學生姓名: 杜宇恒
學生學號: 666
上例可以看到dict函數可以就愛那個序列轉換為字典
dict函數還可以通過關鍵字創建字典。
例如:
detail = dict(name=‘杜宇恒‘,number=‘666‘) print(‘學生的詳細信息:‘,detail)
C:\python\python.exe C:/python.py/zidian.py
學生的詳細信息: {‘name‘: ‘杜宇恒‘, ‘number‘: ‘666‘}
通過關鍵字創建字典是dict函數非常有用的一個功能。
字典的基本操作
字典的基本操作在很多方面與序列(sequence)類似,支持刪除修改等操作。
修改字典
向字典添加新內容的方法是是增加新鍵/值對,修改或刪除已有鍵/值對,修改或刪除已有鍵/值。
例如:
student={‘杜宇恒‘:‘666‘,‘徐偉‘:‘777‘,‘高爽‘:‘888‘} #更新徐偉的學號 student[‘徐偉‘]=‘999‘ print(‘徐偉的學號是:%(徐偉)s‘%student) #添加一個新的學生 student[‘杜兆利‘]=‘1000‘ print(‘杜兆利的學號是:%(杜兆利)s‘%student) print(‘所有學生的信息:‘,student)
C:\python\python.exe C:/python.py/zidian.py
徐偉的學號是:999
杜兆利的學號是:1000
所有學生的信息: {‘杜兆利‘: ‘1000‘, ‘徐偉‘: ‘999‘, ‘杜宇恒‘: ‘666‘, ‘高爽‘: ‘888‘}
刪除字典元素
此處的刪除指的是顯示刪除,顯示刪除一個字典用del命令
例如:
student={‘杜宇恒‘:‘666‘,‘徐偉‘:‘777‘,‘高爽‘:‘888‘,‘杜兆利‘:‘999‘} print(‘刪除之前:‘,student) #刪除高爽 del student[‘高爽‘] print(‘刪除之後:‘,student)
C:\python\python.exe C:/python.py/zidian.py
刪除之前: {‘杜宇恒‘: ‘666‘, ‘杜兆利‘: ‘999‘, ‘高爽‘: ‘888‘, ‘徐偉‘: ‘777‘}
刪除之後: {‘杜宇恒‘: ‘666‘, ‘杜兆利‘: ‘999‘, ‘徐偉‘: ‘777‘}
除了刪除鍵還可以刪除整個字典
例如:
student={‘杜宇恒‘:‘666‘,‘徐偉‘:‘777‘,‘高爽‘:‘888‘,‘杜兆利‘:‘999‘} del student print(‘刪除整個字典之後:‘,student)
C:\python\python.exe C:/python.py/zidian.py
Traceback (most recent call last):
File "C:/python.py/zidian.py", line 8, in <module>
print(‘刪除整個字典之後:‘,student)
NameError: name ‘student‘ is not defined
報錯:student沒有定義
由上例可以看出刪除字典之後就不能字典進行訪問了,執行del操作後字典就不存在了
字典鍵的特性
①鍵必須是不可遍的,可以用數字,字符串或元組充當,不能用列表
②字典值可以沒有限制的取任何pytho對象,既可以是標準對象,也可以是用戶自定義對象,但鍵不行。
例如:
student={‘杜宇恒‘:‘666‘,‘徐偉‘:‘777‘,‘高爽‘:‘888‘,‘杜宇恒‘:‘999‘} print(student)
C:\python\python.exe C:/python.py/zidian.py
{‘杜宇恒‘: ‘999‘, ‘徐偉‘: ‘777‘, ‘高爽‘: ‘888‘}
一個鍵被賦值兩次之後,後面的值會被記住
len函數
len函數用於計算字典元素的個數,即鍵的總數
例如:
student={‘杜宇恒‘:‘666‘,‘徐偉‘:‘777‘,‘高爽‘:‘888‘,‘杜兆利‘:‘999‘} print(‘字典中元素的個數為:%d個‘%len(student))
C:\python\python.exe C:/python.py/zidian.py
字典中元素的個數為:4個
type函數
type(variable)函數返回輸入的變量類型,如果輸入變量的是字典就返回字典
例如:
student={‘杜宇恒‘:‘666‘,‘徐偉‘:‘777‘,‘高爽‘:‘888‘,‘杜兆利‘:‘999‘} print(‘student的類型為:‘,type (student))
C:\python\python.exe C:/python.py/zidian.py
student的類型為: <class ‘dict‘>
字典的格式化字符串
字典的格式化方式是在每轉換說明符中的%字符後加上圓括號括起來的鍵,在跟上其他說明元素。
例如:
student={‘杜宇恒‘:‘666‘,‘徐偉‘:‘777‘,‘高爽‘:‘888‘,‘杜兆利‘:‘999‘} print(‘徐偉的學號是:%(徐偉)s‘%student)
C:\python\python.exe C:/python.py/zidian.py
徐偉的學號是:777
字典的格式化除了增加字符串外,轉換說明符還像以前一樣工作。以這種方式使用字典時,只要給出的鍵都能在字典中找到,就可以獲得任意數量的轉換說明符
字典和列表的區別
字典(dict)的特點是:
查找和插入的速度極快,不會隨著key的增加而變慢。
需要占用大量內存,內存浪費多。
列表(list)的特點是:
查找和插入時間隨著元素的增加而增加。
占用空間小,浪費內存少
註意:dict內部存放的順序和鍵放入的順序是沒有關系的。
字典方法
clera()方法
clera()方法用於刪除字典內的所有項。
clera()方法語法如下:
dict.clear()
dict代表字典,不需要參數。該函數是一個原地操作(類似於list.sort)函數,沒有任何返回值(返回值為None)
clera()方法演示:
student={‘杜宇恒‘:‘666‘,‘徐偉‘:‘777‘,‘高爽‘:‘888‘,‘杜兆利‘:‘999‘} print(‘student字典中的元素為:%d個‘%len(student)) student.clear() print(‘student字典刪除元素後的個數為:%d個‘%len(student))
C:\python\python.exe C:/python.py/zidian.py
student字典中的元素為:4個
student字典刪除元素後的個數為:0
字典調用clear方法後整個字典內所在的所有項都被刪除。
copy方法
copy方法返回一個具有相同鍵/值對的新字典。這個方法是淺復制(shallow copy),因為值本身是相同的,而不是副本。
copy方法語法如下:
dict.copy()
dct代表字典,不需要參數。返回結果為一個字典的淺復制
copy方法演示:
student={‘杜宇恒‘:‘666‘,‘徐偉‘:‘777‘,‘高爽‘:‘888‘,‘杜兆利‘:‘999‘} st=student.copy() print(‘復制後得到的st為:‘,st)
C:\python\python.exe C:/python.py/zidian.py
復制後得到的st為: {‘杜兆利‘: ‘999‘, ‘杜宇恒‘: ‘666‘, ‘徐偉‘: ‘777‘, ‘高爽‘: ‘888‘}
什麽是淺復制?
示例:
student = {‘小智‘:‘1002‘,‘info‘:[‘小張‘,‘1006‘,‘man‘]} st=student.copy() st[‘小智‘] = ‘1005‘ print(‘更改copy後的st為:‘,st) print(‘原字符串為:‘,student) st[‘info‘].remove(‘man‘) print(‘刪除後st為:‘,st) print(‘刪除後student為:‘,student)
C:\python\python.exe C:/python.py/zidian.py
更改copy後的st為: {‘info‘: [‘小張‘, ‘1006‘, ‘man‘], ‘小智‘: ‘1005‘}
原字符串為: {‘info‘: [‘小張‘, ‘1006‘, ‘man‘], ‘小智‘: ‘1002‘}
刪除後st為: {‘info‘: [‘小張‘, ‘1006‘], ‘小智‘: ‘1005‘}
刪除後student為: {‘info‘: [‘小張‘, ‘1006‘], ‘小智‘: ‘1002‘}
從上例可以出,替換副本的值時原始字典不受影響。如果修改了某個值(原地修改,不是替換),原始字典就會改變,因為同樣的值也原字典中以這樣方式進行復制就是淺復制,使用深復制就可以避免該問題。
什麽是深復制?
示例:
#深復制需要調用copy模塊 import copy student = {‘小智‘:‘1002‘,‘info‘:[‘小張‘,‘1006‘,‘man‘]} st=copy.deepcopy(student) st[‘小智‘] = ‘1005‘ print(‘更改copy後的st為:‘,st) print(‘原字符串為:‘,student) st[‘info‘].remove(‘man‘) print(‘刪除後st為:‘,st) print(‘刪除後student為:‘,student)
C:\python\python.exe C:/python.py/zidian.py
更改copy後的st為: {‘小智‘: ‘1005‘, ‘info‘: [‘小張‘, ‘1006‘, ‘man‘]}
原字符串為: {‘小智‘: ‘1002‘, ‘info‘: [‘小張‘, ‘1006‘, ‘man‘]}
刪除後st為: {‘小智‘: ‘1005‘, ‘info‘: [‘小張‘, ‘1006‘]}
刪除後student為: {‘小智‘: ‘1002‘, ‘info‘: [‘小張‘, ‘1006‘, ‘man‘]}
深復制,包含對象裏面的自對象的復制,所以原始對象的改變不會造成深復制裏任何子元素的改變
fromkeys()方法
fromkeys()方法用於創建一個新字典,以序列seq中的元素做字典的鍵,value為字典所有鍵對應的初始值
fromkeys()方法語法如下:
dict.fromkeys(seq[,value])
dict代表指定字典;eq代表字典鍵值列表;value代表可選參數,設置鍵序列(seq)。該方法返回結果為字典。
fromkeys()方法演示:
seq=(‘name‘,‘age‘,‘sex‘) info = dict.fromkeys(seq) print(‘新的字典為:%s‘% info) info =dict.fromkeys(seq,10) print(‘賦值後的字典為:%s‘%info)
C:\python\python.exe C:/python.py/zidian.py
新的字典為:{‘name‘: None, ‘sex‘: None, ‘age‘: None}
賦值後的字典為:{‘name‘: 10, ‘sex‘: 10, ‘age‘: 10}
fromkeys()方法使用給定位的鍵建立新字典,每個鍵默認對應的值為None。
get()方法
get()方法返回指定的鍵值,如果值不字典中,就返回默認值。
get()方法語法如下:
dict.get(key,default=None)
dict代表指定字典;key 代表字典中要查找的鍵,default代表指定鍵值不存在時默認值。該方法返回結果為指定的鍵值,如果值不在字典中,就返回默認值None。
get()方法演示:
student={‘杜宇恒‘:‘666‘,‘徐偉‘:‘777‘,‘高爽‘:‘888‘,‘杜兆利‘:‘999‘} print(‘高爽的學號為:%s‘% student.get(‘高爽‘)) #訪問一個不存在的鍵值 print(‘柴興旺的學號為:%s‘% student.get(‘柴興旺‘))
C:\python\python.exe C:/python.py/zidian.py
高爽的學號為:888
柴興旺的學號為:None
使用get方法訪問一個不存在的鍵時,返回None。可以自定義默認值,用於替換None。
例如:
student={‘杜宇恒‘:‘666‘,‘徐偉‘:‘777‘,‘高爽‘:‘888‘,‘杜兆利‘:‘999‘} #訪問一個不存在的 鍵值時將默認返回值None替換為自定的值 print(‘柴興旺的學號為:%s‘% student.get(‘柴興旺‘,‘此人不存在!!!‘))
C:\python\python.exe C:/python.py/zidian.py
柴興旺的學號為:此人不存在!!
從上例可以看出‘此人不存在!!!‘代替了None
key in dict()方法
key in dict()方法python字典in操作符用於判斷鍵是否存在於字典中,如果鍵在字典dict中就返回true,否則就返回false。
key in dict()方法語法如下:
key in dict
dict代表指定字典;key代表要在字典中查找的鍵。如果鍵在字典dict中就返回true,否則就返回false。
key in dict()方法演示: student={‘杜宇恒‘:‘666‘,‘徐偉‘:‘777‘,‘高爽‘:‘888‘,‘杜兆利‘:‘999‘} print(‘杜宇恒在student字典中嗎?%s‘%(‘杜宇恒‘in student)) print(‘柴興旺在student字典中嗎?%s‘%(‘柴興旺在‘in student))
C:\python\python.exe C:/python.py/zidian.py
杜宇恒在student字典中嗎?True
柴興旺在student字典中嗎?False
註意:在python2中有一個相同功能的方法has_key方法,has_key方法的使用方式和in不同。
items()方法
items()方法以列表返回可遍歷的(鍵,值)元組數組。
items()方法語法如下:
dict.items()
dict代表指定字典;不需要參數。返回結果為可遍歷的(鍵/值)元組數組。
items()方法演示:
student={‘杜宇恒‘:‘666‘,‘徐偉‘:‘777‘} print(‘調用items方法的結果:%s‘%student.items())
C:\python\python.exe C:/python.py/zidian.py
調用items方法的結果:dict_items([(‘杜宇恒‘, ‘666‘), (‘徐偉‘, ‘777‘)])
上例可以看出返回結果為一個元組組數。
註意:在python2中提供了一個iteritems方法,和items方法的作用大致相同,但是iteritems方法返回的是一個叠代器對象,而不是列表。在python3沒有iteritems方法
keys()方法
keys()方法以列表返回一個字典的所有鍵。
keys()方法語法如下;
dict.keys()
dict代表指定字典;不需要參數。返回結果為一個字典的所有鍵。
keys()方法演示:
student={‘杜宇恒‘:‘666‘,‘徐偉‘:‘777‘} print("student字典中的所有鍵為:%s"%student.keys())
C:\python\python.exe C:/python.py/zidian.py
student字典中的所有鍵為:dict_keys([‘杜宇恒‘, ‘徐偉‘])
上例可以看出返回的是一個元組數,數組中包含字典所有鍵。
setdefault()方法
setdefault()方法和get()方法類似,用於獲得與給定鍵相關聯的值。如果鍵不存在於字典中,就會添加鍵並將值設為默認值。
setdefault()方法語法如下:
dict.setdefault(key.default=None)
dict代表指定字典;key代表查找的鍵值,default代表不存在時設置的默認鍵值。該方法沒有任何返回值。
setdefault()方法演示:
student={‘杜宇恒‘:‘666‘,‘徐偉‘:‘777‘} print(‘高爽的鍵值為:%s‘%student.setdefault(‘高爽‘)) print(‘徐偉的鍵值為:%s‘%student.setdefault(‘徐偉‘)) print(‘student字典的型值為:%s‘%student)
C:\python\python.exe C:/python.py/zidian.py
高爽的鍵值為:None
徐偉的鍵值為:777
student字典的型值為:{‘徐偉‘: ‘777‘, ‘高爽‘: None, ‘杜宇恒‘: ‘666‘}
上例可以看出,當鍵不存在時,setdefault()方法返回默認值並更新字典;如果鍵存在就返回對應的值,不改變字典。
使用setdefault()訪問一個不存在的鍵值時,如果不設定就使用None,如果設定就使用設定的值。
例如:
student={‘杜宇恒‘:‘666‘,‘徐偉‘:‘777‘} print(‘高爽的鍵值為:%s‘%student.setdefault(‘高爽‘))
C:\python\python.exe C:/python.py/zidian.py
高爽的鍵值為:None
student={‘杜宇恒‘:‘666‘,‘徐偉‘:‘777‘} print(‘高爽的鍵值為:%s‘%student.setdefault(‘高爽‘,‘888‘)) print(student)
C:\python\python.exe C:/python.py/zidian.py
高爽的鍵值為:888
{‘高爽‘: ‘888‘, ‘杜宇恒‘: ‘666‘, ‘徐偉‘: ‘777‘}
上列可以看出使用默認值時輸出結果為None;設定了鍵值後便輸出了所設定的鍵值,並且更新了字典。
update方法()方法
update方法()方法用於把字典dict2的鍵值/值對更新到dict裏
update方法()方法語法如下:
dict.update(dict2)
dict代表指定字典;dict2代表添加到指定字典dict裏的字典。該方法沒有任何返回值。
update方法()方法演示:
student={‘杜宇恒‘:‘666‘,‘徐偉‘:‘777‘} student2={‘高爽‘:‘888‘} print(‘原student字典為:%s‘%student) student.update(student2) print(‘新student字典為:%s‘%student) #對相同項覆蓋 student3={‘高爽‘:‘1010‘} student.update(student3) print(‘覆蓋後的新student字典為:%s‘%student)
C:\python\python.exe C:/python.py/zidian.py
原student字典為:{‘杜宇恒‘: ‘666‘, ‘徐偉‘: ‘777‘}
新student字典為:{‘杜宇恒‘: ‘666‘, ‘徐偉‘: ‘777‘, ‘高爽‘: ‘888‘}
覆蓋後的新student字典為:{‘杜宇恒‘: ‘666‘, ‘徐偉‘: ‘777‘, ‘高爽‘: ‘1010‘}
由上例可以看出,提供的字典中的項被添加到舊字典中,如果有相同鍵就會覆蓋。
values()方法
values()方法以列表形式返回字典中所有值,與返回鍵的列表不同,返回列表中可以包含重復的元素。
values()方法語法如下:
dict.values()
dict代表指定字典;不需要參數。返回結果為字典中的所有值。
values()方法演示:
student={‘杜宇恒‘:‘666‘,‘徐偉‘:‘777‘,‘高爽‘:‘666‘} print("student字典所有的值為:%s"%list(student.values()))
C:\python\python.exe C:/python.py/zidian.py
student字典所有的值為:[‘666‘, ‘666‘, ‘888‘]
上例可以看出,返回的列表中包含重復的元素。
本文出自 “duyuheng” 博客,謝絕轉載!
python3.5修煉手冊10