交换字典的key和value
生活随笔
收集整理的這篇文章主要介紹了
交换字典的key和value
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目錄
一、題目描述
二、字典介紹
1.基本用法
2.特點(diǎn)
3.常用方法
三、解析
四、源碼
一、題目描述
編寫一個(gè)函數(shù),交換指定字典的key和value
二、字典介紹
1.基本用法
對(duì)于初學(xué)者而言,應(yīng)牢記字典包含多個(gè) key-value 對(duì),而 key 是字典的關(guān)鍵數(shù)據(jù),因此程序?qū)ψ值涞牟僮鞫际腔?key 的。基本操作如下:通過 key 訪問 value 。通過 key 添加 key-value 對(duì)。通過 key 刪除 key-value 對(duì)。通過 key 修改 key-value 對(duì)。通過 key 判斷指定 key-value 對(duì)是否存在。通過 key 訪問 value 使用的也是方括號(hào)語法,就像前面介紹的列表和元組一樣,只是此時(shí)在方括號(hào)中放的是 key,而不是列表或元組中的索引。2.特點(diǎn)
字典中所有元素都是一個(gè)key-value對(duì),key不允許重復(fù),value可以重復(fù) 字典中的元素是無序的 —— —— ——沒有下標(biāo),取值通過方法獲取 字典是可變的,字典中key必須是不可變對(duì)象 —— —— ——增刪改查 字典也可以根據(jù)需要?jiǎng)討B(tài)地伸縮 字典會(huì)浪費(fèi)較大的內(nèi)存,是一種 以空間換時(shí)間的數(shù)據(jù)結(jié)構(gòu)3.常用方法
clear()方法:clear() 用于清空字典中所有的 key-value 對(duì),對(duì)一個(gè)字典執(zhí)行 clear() 方法之后,該字典就會(huì)變成一個(gè)空字典 代碼如下:cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}print(cars) # {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}# 清空cars所有key-value對(duì)cars.clear()print(cars) # {}get()方法:get() 方法其實(shí)就是根據(jù) key 來獲取 value,它相當(dāng)于方括號(hào)語法的增強(qiáng)版,當(dāng)使用方括號(hào)語法訪問并不存在的 key 時(shí),字典會(huì)引發(fā) KeyError 錯(cuò)誤;但如果使用 get() 方法訪問不存在的 key,該方法會(huì)簡(jiǎn)單地返回 None,不會(huì)導(dǎo)致錯(cuò)誤 代碼如下:cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}# 獲取'BMW'對(duì)應(yīng)的valueprint(cars.get('BMW')) # 8.5print(cars.get('PORSCHE')) # Noneprint(cars['PORSCHE']) # KeyErrorupdate()方法:update() 方法可使用一個(gè)字典所包含的 key-value 對(duì)來更新己有的字典。在執(zhí)行 update() 方法時(shí),如果被更新的字典中己包含對(duì)應(yīng)的 key-value 對(duì),那么原 value 會(huì)被覆蓋;如果被更新的字典中不包含對(duì)應(yīng)的 key-value 對(duì),則該 key-value 對(duì)被添加進(jìn)去。 代碼如下:cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}cars.update({'BMW':4.5, 'PORSCHE': 9.3})print(cars)從上面的執(zhí)行過程可以看出,由于被更新的 dict 中己包含 key 為“BMW”的 key-value 對(duì),因此更新時(shí)該 key-value 對(duì)的 value 將被改寫;但如果被更新的 dict 中不包含 key 為“PORSCHE”的 key-value 對(duì),那么更新時(shí)就會(huì)為原字典增加一個(gè) key-value 對(duì)。items()、keys()、values()方法:items()、keys()、values() 分別用于獲取字典中的所有 key-value 對(duì)、所有 key、所有 value。這三個(gè)方法依次返回 dict_items、dict_keys 和 dict_values 對(duì)象,Python 不希望用戶直接操作這幾個(gè)方法,但可通過 list() 函數(shù)把它們轉(zhuǎn)換成列表。 代碼如下:cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}# 獲取字典所有的key-value對(duì),返回一個(gè)dict_items對(duì)象ims = cars.items()print(type(ims)) # <class 'dict_items'># 將dict_items轉(zhuǎn)換成列表print(list(ims)) # [('BMW', 8.5), ('BENS', 8.3), ('AUDI', 7.9)]# 訪問第2個(gè)key-value對(duì)print(list(ims)[1]) # ('BENS', 8.3)# 獲取字典所有的key,返回一個(gè)dict_keys對(duì)象kys = cars.keys()print(type(kys)) # <class 'dict_keys'># 將dict_keys轉(zhuǎn)換成列表print(list(kys)) # ['BMW', 'BENS', 'AUDI']# 訪問第2個(gè)keyprint(list(kys)[1]) # 'BENS'# 獲取字典所有的value,返回一個(gè)dict_values對(duì)象vals = cars.values()# 將dict_values轉(zhuǎn)換成列表print(type(vals)) # [8.5, 8.3, 7.9]# 訪問第2個(gè)valueprint(list(vals)[1]) # 8.3從上面代碼可以看出,程序調(diào)用字典的 items()、keys()、values() 方法之后,都需要調(diào)用 list() 函數(shù)將它們轉(zhuǎn)換為列表,這樣即可把這三個(gè)方法的返回值轉(zhuǎn)換為列表。pop方法:pop() 方法用于獲取指定 key 對(duì)應(yīng)的 value,并刪除這個(gè) key-value 對(duì)。 代碼如下:cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}print(cars.pop('AUDI')) # 7.9print(cars) # {'BMW': 8.5, 'BENS': 8.3}popitem()方法:popitem() 方法用于隨機(jī)彈出字典中的一個(gè) key-value 對(duì)。此處的隨機(jī)其實(shí)是假的,正如列表的 pop() 方法總是彈出列表中最后一個(gè)元素,實(shí)際上字典的 popitem() 其實(shí)也是彈出字典中最后一個(gè) key-value 對(duì)。由于字典存儲(chǔ) key-value 對(duì)的順序是不可知的,因此開發(fā)者感覺字典的 popitem() 方法是“隨機(jī)”彈出的,但實(shí)際上字典的 popitem() 方法總是彈出底層存儲(chǔ)的最后一個(gè) key-value 對(duì)。 代碼如下:cars = {'AUDI': 7.9, 'BENS': 8.3, 'BMW': 8.5}print(cars)# 彈出字典底層存儲(chǔ)的最后一個(gè)key-value對(duì),彈出也就是相當(dāng)于刪除了,再輸出原字典時(shí),最后一個(gè)key-vaule已經(jīng)沒有了print(cars.popitem()) # ('AUDI', 7.9)print(cars) # {'BMW': 8.5, 'BENS': 8.3}setdefault()方法:setdefault() 方法也用于根據(jù) key 來獲取對(duì)應(yīng) value 的值。但該方法有一個(gè)額外的功能,即當(dāng)程序要獲取的 key 在字典中不存在時(shí),該方法會(huì)先為這個(gè)不存在的 key 設(shè)置一個(gè)默認(rèn)的 value,然后再返回該 key 對(duì)應(yīng)的 value??傊?#xff0c;setdefault() 方法總能返回指定 key 對(duì)應(yīng)的 value;如果該 key-value 對(duì)存在,則直接返回該 key 對(duì)應(yīng)的 value;如果該 key-value 對(duì)不存在,則先為該 key 設(shè)置默認(rèn)的 value,然后再返回該 key 對(duì)應(yīng)的 value。 代碼如下:cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}# 設(shè)置默認(rèn)值,該key在dict中不存在,新增key-value對(duì)print(cars.setdefault('PORSCHE', 9.2)) # 9.2print(cars)# 設(shè)置默認(rèn)值,該key在dict中存在,不會(huì)修改dict內(nèi)容print(cars.setdefault('BMW', 3.4)) # 8.5print(cars)fromkeys()方法:fromkeys() 方法使用給定的多個(gè) key 創(chuàng)建字典,這些 key 對(duì)應(yīng)的 value 默認(rèn)都是 None;也可以額外傳入一個(gè)參數(shù)作為默認(rèn)的 value。該方法一般不會(huì)使用字典對(duì)象調(diào)用(沒什么意義),通常會(huì)使用 dict 類直接調(diào)用。 代碼如下:# 使用列表創(chuàng)建包含2個(gè)key的字典a_dict = dict.fromkeys(['a', 'b'])print(a_dict) # {'a': None, 'b': None}# 使用元組創(chuàng)建包含2個(gè)key的字典b_dict = dict.fromkeys((13, 17))print(b_dict) # {13: None, 17: None}# 使用元組創(chuàng)建包含2個(gè)key的字典,指定默認(rèn)的valuec_dict = dict.fromkeys((13, 17), 'good')print(c_dict) # {13: 'good', 17: 'good'}使用字典格式化字符串在格式化字符串時(shí),如果要格式化的字符串模板中包含多個(gè)變量,后面就需要按順序給出多個(gè)變量,這種方式對(duì)于字符串模板中包含少量變量的情形是合適的,但如果字符串模板中包含大量變量,這種按順序提供變量的方式則有些不合適??筛臑樵谧址0逯邪?key 指定變量,然后通過字典為字符串模板中的 key 設(shè)置值。 代碼如下:# 字符串模板中使用keytemp = '教程是:%(name)s, 價(jià)格是:%(price)010.2f, 出版社是:%(publish)s'book = {'name':'Python基礎(chǔ)教程', 'price': 99, 'publish': 'C語言中文網(wǎng)'}# 使用字典為字符串模板中的key傳入值print(temp % book)book = {'name':'C語言小白變怪獸', 'price':159, 'publish': 'C語言中文網(wǎng)'}# 使用字典為字符串模板中的key傳入值print(temp % book)三、解析
?首先通過items()方法去獲取所有的鍵值對(duì),然后再把其賦值到一個(gè)新的字典中,這樣就形成了對(duì)換;因?yàn)樽值涞拇鎯?chǔ)是用的hash函數(shù)存儲(chǔ),存儲(chǔ)是無序的;賦值的時(shí)候相當(dāng)于給新的字典的key賦值value,但此時(shí)的值與原字典相反,因?yàn)閷⒃璳ey和value的位置進(jìn)行了調(diào)換。
四、源碼
def exchange(x):mydict_new = {}for key, val in mydict.items():#items獲取所有的鍵值對(duì),先取出來的為關(guān)鍵字,后取出來的為鍵值mydict_new[val] = key#賦值給新的字典,字典是內(nèi)部用的是hash表存儲(chǔ),是無序的,查找時(shí)是通過key查找value所在的位置return mydict_newif __name__ == '__main__':mydict = {'張三':23,'李四':33,'王五':44}print(exchange(mydict))總結(jié)
以上是生活随笔為你收集整理的交换字典的key和value的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nuxt添加.html,Nuxt内导航栏
- 下一篇: 单链表入门(二)