Python3.5 筆記——第5章 字典

Python3.5筆記

第五章 字典

什么是字典

字典是Python中唯一內(nèi)建的映射類(lèi)型,字典指定值沒(méi)有特定的順序,都儲(chǔ)存在一個(gè)特定的鍵(key)里,鍵可以是數(shù)字、字符串或者元組,值可以是任何類(lèi)型。

字典的創(chuàng)建和使用

字典由多個(gè)鍵及其對(duì)應(yīng)的值構(gòu)成的對(duì)組成(把鍵/值對(duì)稱(chēng)為項(xiàng))。字典的每個(gè)鍵/值(key/value)對(duì)用冒號(hào)(:)分割,每個(gè)項(xiàng)用逗號(hào)分割,整個(gè)字典包括在花括號(hào){}中??兆值溆蓛蓚€(gè)花括號(hào){}組成。語(yǔ)法格式如下:

map = {key1:value1,key2:value2,key3:value3...}

其中,鍵必須是唯一的,值不需要唯一。值可以是任意數(shù)據(jù)類(lèi)型,但鍵必須是不可變的,如:字符串、數(shù)字、元組。

實(shí)例:

dict1 = {'小智':1001,'小明':1002,'小強(qiáng)':1003}
print(dict1)
print(dict1['小智'])

輸出:

{'小智': 1001, '小明': 1002, '小強(qiáng)': 1003}
1001

通過(guò)dict()函數(shù)創(chuàng)建字典

可以用dict()函數(shù),通過(guò)其他映射(如其他字典)或鍵/值序列對(duì),建立字典。如:

student = [('小智','1001'),('小明','1002'),('小強(qiáng)','1003')]
detail = dict(student)
print(detail)

輸出:

{'小強(qiáng)': '1003', '小明': '1002', '小智': '1001'}

dict函數(shù)可以通過(guò)關(guān)鍵字參數(shù)創(chuàng)建字典。例如:

detail2 = dict(name='小智',number=1002)
print(detail2)

輸出:

{'number': 1002, 'name': '小智'}

字典的基本操作

修改、新增元素

向字典增加新內(nèi)容是增加新鍵/值對(duì),修改或刪除已有鍵/值對(duì)。如:

student = {'小智':1001,'小明':1002,'小強(qiáng)':1003}
student['小強(qiáng)'] = 'hello'
print(student)
student['小張'] = 1004
print(student)

輸出:

{'小明': 1002, '小智': 1001, '小強(qiáng)': 'hello'}
{'小張': 1004, '小明': 1002, '小智': 1001, '小強(qiáng)': 'hello'}

刪除字典中的元素、刪除字典

此處的刪除指的是顯示刪除,顯示刪除使用del命令,如:

del student['小智'] #刪除字典中的元素
print(student)
del student #刪除整個(gè)字典
print(student)
{'小強(qiáng)': 'hello', '小張': 1004, '小明': 1002}
Traceback (most recent call last):
  File "D:/pyspace/hellopython/Chapter5.py", line 29, in <module>
    print(student)
NameError: name 'student' is not defined

字典的特性

鍵不可以重復(fù)出現(xiàn)

鍵不可以重復(fù)出現(xiàn),鍵重復(fù)出現(xiàn)時(shí),只保留后面的值,如:

student = {'小智':1001,'小明':1002,'小強(qiáng)':1003,'小智':1005}
print(student)
{'小強(qiáng)': 1003, '小智': 1005, '小明': 1002}

鍵必須是不可變的

鍵必須是不可變的,所以,可以用數(shù)字、字符串、元組,不可以用列表。

student = {['小智']:1001}
print(student)

輸出:

Traceback (most recent call last):
{'小智': 1001, '小明': 1002, '小強(qiáng)': 1003}
  File "D:/pyspace/hellopython/Chapter5.py", line 36, in <module>
1001
    student = {['小智']:1001}
--------------通過(guò)dict()函數(shù)創(chuàng)建字典----------------
TypeError: unhashable type: 'list'
#student = {['小智']:1001} #鍵必須是不可變的,不可以是列表
student = {('小智'):1001} #鍵必須是不可變的,可以是元組
print(student)

輸出:

{'小智': 1001}

len()函數(shù)

len()函數(shù)用于統(tǒng)計(jì)字典中元素的個(gè)數(shù)。語(yǔ)法格式如下:

len(dict)

示例:

student = {'小智':1001,'小明':1002,'小強(qiáng)':1003,'小智':1005}
print("student字典的長(zhǎng)度是%d" % len(student))

輸出:

student字典的長(zhǎng)度是3

type()函數(shù)

type()函數(shù)用于返回輸入的變量類(lèi)型,如果輸入的變量是字典,就返回字典類(lèi)型。語(yǔ)法格式如下:

type(var1)

示例:

student = {'小智':1001,'小明':1002,'小強(qiáng)':1003,'小智':1005}
print("student字典的類(lèi)型是%s" % type(student))

輸出:

student字典的類(lèi)型是<class 'dict'>

字典的格式化

字典的格式化方式是在,每個(gè)轉(zhuǎn)換說(shuō)明符號(hào)%后,加上用圓括號(hào)括起來(lái)的鍵。再跟上其他元素。如:

student = {'小智':1001,'小明':1002,'小強(qiáng)':1003,'小智':1005}
print("student字典中小明的學(xué)號(hào)是%(小明)s" % student)

輸出:

student字典中小明的學(xué)號(hào)是1002

字典和list的區(qū)別

字典 list
查找和插入的速度極快,操作時(shí)間不會(huì)隨著key的增加而增加 查找和插入的時(shí)間,會(huì)隨著元素的增加而增加
需要占用大量的內(nèi)存,內(nèi)存浪費(fèi)多 占用空間少,浪費(fèi)內(nèi)存小

字典的方法

1、clear()方法

clear()方法用于清空字典中的所有元素,clear()方法沒(méi)有返回值,而是直接該表字典的值。語(yǔ)法格式如下:

dict.clear()

示例:

student = {'小智':1001,'小明':1002,'小強(qiáng)':1003,'小智':1005}
student.clear()
print("student字典中元素的個(gè)數(shù)是:%d" % len(student))

輸出:

student字典中元素的個(gè)數(shù)是:0
clear()方法和賦空值的區(qū)別
student = {'小智':1001,'小明':1002,'小強(qiáng)':1003,'小智':1005}
studentCopy = student
student.clear()#當(dāng)使用clear()方法時(shí),studentCopy的值也被清空了
print(student)
print(studentCopy)

student = {'小智':1001,'小明':1002,'小強(qiáng)':1003,'小智':1005}
studentCopy = student
student = {}#當(dāng)通過(guò)空字典重新賦值時(shí),studentCopy的值沒(méi)有變化,還是指向原先的值
print(student)
print(studentCopy)

輸出:

{}
{}
{}
{'小明': 1002, '小強(qiáng)': 1003, '小智': 1005}

2、copy()方法

copy()方法返回一個(gè)具有相同鍵/值對(duì)的新字典。這個(gè)方法是淺復(fù)制,因?yàn)橹当旧硎窍嗤?,而不是副本。語(yǔ)法如下:

dict.copy()

返回值是一個(gè)字典的淺復(fù)制。

示例:

student = {'小智':1001,'小明':1002,'小強(qiáng)':1003}
studentCopy = student.copy()
print("student字典copy的結(jié)果是:",studentCopy)

輸出:

student字典copy的結(jié)果是: {'小智': 1001, '小強(qiáng)': 1003, '小明': 1002}
什么是淺復(fù)制?

淺復(fù)制是指,復(fù)制后的副本和原來(lái)的對(duì)象,只是值相同,但是指向的是不同的對(duì)象,而不是同一個(gè)對(duì)象。所以改變A的值不會(huì)影響B(tài),同樣改變B的值,也不會(huì)影響A。如:

student = {'小智':1001,'小明':1002,'小強(qiáng)':1003}
studentCopy = student.copy()
print("student字典copy的結(jié)果是:",studentCopy)

studentCopy['小強(qiáng)']=2018
print("更新copy后的值:更新后的studentCopy是:",studentCopy)
print("更新copy后的值:student是:",student)

del studentCopy['小強(qiáng)']
print("刪除copy后的值:更新后的studentCopy是:",studentCopy)
print("刪除copy后的值:student是:",student)

student['小明'] = 3333
print("更新原始值:更新后的studentCopy是:",studentCopy)
print("更新原始值:student是:",student)

del student['小強(qiáng)']
print("刪除原始值:更新后的studentCopy是:",studentCopy)
print("刪除原始值:student是:",student)

輸出:

student字典copy的結(jié)果是: {'小智': 1001, '小強(qiáng)': 1003, '小明': 1002}
更新copy后的值:更新后的studentCopy是: {'小智': 1001, '小強(qiáng)': 2018, '小明': 1002}
更新copy后的值:student是: {'小智': 1001, '小強(qiáng)': 1003, '小明': 1002}
刪除copy后的值:更新后的studentCopy是: {'小智': 1001, '小明': 1002}
刪除copy后的值:student是: {'小智': 1001, '小強(qiáng)': 1003, '小明': 1002}
更新原始值:更新后的studentCopy是: {'小智': 1001, '小明': 1002}
更新原始值:student是: {'小智': 1001, '小強(qiáng)': 1003, '小明': 3333}
刪除原始值:更新后的studentCopy是: {'小智': 1001, '小明': 1002}
刪除原始值:student是: {'小智': 1001, '小明': 3333}

3、fromkeys()方法

fromkeys()方法用于創(chuàng)建一個(gè)新字典,以序列seq中的元素做為key,value為字典中所有元素對(duì)應(yīng)的初始值。格式如下:

dict.fromkeys(seq[,value])

其中,dict代表指定的字典,seq代表字典鍵值列表,value代表可選參數(shù),為鍵的值,如果不指定則為None,如果指定則給所有的key統(tǒng)一賦初值。

示例:

seq = ('name','age','sex')
print(dict.fromkeys(seq))
print(dict.fromkeys(seq,10))

輸出:

{'name': None, 'sex': None, 'age': None}
{'name': 10, 'sex': 10, 'age': 10}

4、get()方法

get()方法用于返回指定鍵的值,如果值不在字典中,則返回默認(rèn)值。語(yǔ)法如下:

dict.get(key,default=None)

示例:

student = {'小智':1001,'小明':1002,'小強(qiáng)':1003}
print("student中小智的學(xué)號(hào)是:%s" % student.get('小智'))
print("student中小智的學(xué)號(hào)是:%s" % student['小智'])#使用字典下標(biāo)取值
print("student中小張的學(xué)號(hào)是:%s" % student.get('小張','沒(méi)有這個(gè)人'))#get()方法取值不存在時(shí),不會(huì)報(bào)錯(cuò)
print("student中小張的學(xué)號(hào)是:%s" % student['小張'])#使用字典下標(biāo)取值不存在時(shí),會(huì)報(bào)錯(cuò)。

輸出:

student中小智的學(xué)號(hào)是:1001
student中小智的學(xué)號(hào)是:1001
student中小張的學(xué)號(hào)是:沒(méi)有這個(gè)人
print("student中小張的學(xué)號(hào)是:%s" % student['小張'])
{'小智': '1001', '小明': '1002', '小強(qiáng)': '1003'}
KeyError: '小張'

5、key in dict方法

Python字典in操作符用于判斷鍵是否存在于字典中,如果鍵在dict中就返回true,否則返回false。語(yǔ)法格式如下:

key in dict

示例:

student = {'小智':1001,'小明':1002,'小強(qiáng)':1003}
print("小智在字典中:%s" % ('小智' in student))#注意要用括號(hào)括起來(lái),否則輸出為false

輸出:

小智在字典中:True

6、items()方法

items()方法返回可遍歷的元素列表。語(yǔ)法格式如下:

dict.items()

示例:

student = {'小智':1001,'小明':1002,'小強(qiáng)':1003}
print(student.items())

輸出:

dict_items([('小明', 1002), ('小強(qiáng)', 1003), ('小智', 1001)])

7、keys()方法

keys()方法以列表返回一個(gè)字典所有鍵。語(yǔ)法格式如下:

dict.keys()

示例:

student = {'小智':1001,'小明':1002,'小強(qiáng)':1003}
print(student.keys())

輸出:

dict_keys(['小智', '小明', '小強(qiáng)'])

8、setdefault()方法

setdefault()方法,用于獲得與給定鍵相關(guān)聯(lián)的值。如果值在字典中不存在,就會(huì)添加鍵并將值設(shè)為默認(rèn)值。此方法沒(méi)有返回值。語(yǔ)法格式如下:

dict.setdefault(key,default=None)

示例:

student = {'小智':1001,'小明':1002,'小強(qiáng)':1003}
print("student中小智的學(xué)號(hào)是:%s" % student.setdefault('小智'))
print("student中小智的學(xué)號(hào)是:%s" % student.setdefault('小智',2001))#key存在的話,返回key的值,不改變key對(duì)應(yīng)的值
#print("student中小張的學(xué)號(hào)是:%s" % student.setdefault('小張')) #如果不指定值,則默認(rèn)值為None
print("student中小張的學(xué)號(hào)是:%s" % student.setdefault('小張',1004)) #key不存在,存在指定值,則value=指定值
print("student中小張的學(xué)號(hào)是:%s" % student['小張'])

輸出:

student中小智的學(xué)號(hào)是:1001
student中小智的學(xué)號(hào)是:1001
student中小張的學(xué)號(hào)是:1004
student中小張的學(xué)號(hào)是:1004

9、update()方法

update()方法用于把字典dict2中鍵/值更新到指定dict里。語(yǔ)法格式如下:

dict.update(dict2)

示例:

student = {'小智':1001,'小明':1002,'小強(qiáng)':1003}
studentb = {'小張':1004,'小李':1005}
student.update(studentb)
studentc = {'小張':2001,'小李':2002}#相同的項(xiàng)會(huì)覆蓋
student.update(studentc)
print(student)

輸出

{'小智': 1001, '小張': 2001, '小強(qiáng)': 1003, '小明': 1002, '小李': 2002}

10、values()方法

values()方法以列表的形式返回字典中所有的值。與返回鍵的列表不同的是

習(xí)題

#用dict函數(shù)實(shí)現(xiàn)存儲(chǔ)一個(gè)人的姓名、手機(jī)號(hào)和地址信息
person = [('姓名','張三'),('手機(jī)號(hào)','13388886666'),('地址','火星')]
print(dict(person))
#創(chuàng)建一個(gè)字典,里面元素的鍵/值全部由字符串組成,然后更改某個(gè)元素,更改其
#值為非字符串形式
student = {'小智':'1001','小明':'1002','小強(qiáng)':'1003'}
# student['小智'] = 2018
student['小智'] = ['2018','世界杯']
print(student)

輸出:

{'姓名': '張三', '地址': '火星', '手機(jī)號(hào)': '13388886666'}
{'小強(qiáng)': '1003', '小智': ['2018', '世界杯'], '小明': '1002'}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 6,319評(píng)論 0 10
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,537評(píng)論 19 139
  • 大四年末,結(jié)束了最后一門(mén)考試,卸下渾身的包袱,我覺(jué)得我這輩子的考試都被我考完了。 買(mǎi)了一張火車(chē)票,晃晃蕩蕩一整夜到...
    akta閱讀 251評(píng)論 0 0
  • 朋友分享了自己可愛(ài)的德國(guó)籍小外孫的一段吃飯視頻,我忍不住截屏獲取了上面的這張照片。 我時(shí)常會(huì)去翻看這張照片,對(duì)德式...
    jasmine南京閱讀 374評(píng)論 7 2
  • 2017年是個(gè)極不平凡的一年。國(guó)家逐漸富強(qiáng),社會(huì)不斷發(fā)展,中國(guó)十九大在11月份召開(kāi),中國(guó)的發(fā)展在上一個(gè)階段...
    氵三人閱讀 678評(píng)論 0 1

友情鏈接更多精彩內(nèi)容