1. 程式人生 > >python3.5修煉手冊10

python3.5修煉手冊10

字典 duyuheng 使用

字典


字典的使用

在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