在上節(jié)我們學(xué)習(xí)了字典的方法,本章節(jié)來了解一下混合字典及字典的遍歷和字典推導(dǎo)式。
1. 混合字典
所謂混合字典,即字典中存儲(chǔ)的數(shù)據(jù)是各種類型混合在一起的,鍵需要取不可變的數(shù)據(jù)類型,但是值是可以取任意類型的對(duì)象。
我們先來看一個(gè)混合字典:
my_dcit = {'小明':['身高:170cm','體重:65kg'],'小李':'愛學(xué)習(xí),愛運(yùn)動(dòng)','小華':('居住地:蘇州','出生地:上海')}
這個(gè)字典的值由列表,字符串和元組構(gòu)成,我們可以通過上一節(jié)的方法來訪問這個(gè)混合字典??聪旅嬉欢未a
my_dcit = {'小明':['身高:170cm','體重:65kg'],'小李':'愛學(xué)習(xí),愛運(yùn)動(dòng)','小華':('居住地:蘇州','出生地:上海')} print('訪問key=‘小明’->',my_dcit['小明']) print('訪問key=‘小華’->',my_dcit['小李']) print('訪問key=‘小華’->',my_dcit['小華']) print('itmes()方法:',my_dcit.items()) #整體訪問 print('keys()方法:',my_dcit.keys()) #只訪問了所有key print('values()方法:',my_dcit.values()) #只訪問了value print('get()方法:',my_dcit.get('小明')) #get方法來訪問指定鍵 my_dcit.pop('小明') #此步驟為pop()方法,會(huì)刪除鍵=‘小明’的成對(duì)元素 print('pop()方法后的my_dict:',my_dcit) #查看一下刪除后的字典
看一下輸出結(jié)果:
訪問key=‘小明’-> ['身高:170cm', '體重:65kg'] 訪問key=‘小華’-> 愛學(xué)習(xí),愛運(yùn)動(dòng) 訪問key=‘小華’-> ('居住地:蘇州', '出生地:上海') itmes()方法: dict_items([('小明', ['身高:170cm', '體重:65kg']), ('小李', '愛學(xué)習(xí),愛運(yùn)動(dòng)'), ('小華', ('居住地:蘇州', '出生地:上海'))]) keys()方法: dict_keys(['小明', '小李', '小華']) values()方法: dict_values([['身高:170cm', '體重:65kg'], '愛學(xué)習(xí),愛運(yùn)動(dòng)', ('居住地:蘇州', '出生地:上海' )]) get()方法: ['身高:170cm', '體重:65kg'] pop()方法后的my_dict: {'小李': '愛學(xué)習(xí),愛運(yùn)動(dòng)', '小華': ('居住地:蘇州', '出生地:上海')}
2. 遍歷字典
我們?cè)谑褂米值涞慕?jīng)常要進(jìn)行字典的遍歷,通常會(huì)使用for循環(huán)去遍歷字典所有的鍵。
我們看一下一般情況下的遍歷訪問:
>>> my_dict ={1001:'小明',1002:'小華',1003:'小張'} >>> for i in my_dict: print(i, my_dict[i])#輸出key及key對(duì)應(yīng)的值 1001 小明 1002 小華 1003 小張
我們?cè)讷@取對(duì)象的時(shí)候也會(huì)使用items()方法來獲取成對(duì)的元素。
>>> my_dict ={1001:'小明',1002:'小華',1003:'小張'} >>> for i in my_dict.items(): print(i) (1001, '小明') (1002, '小華') (1003, '小張')
這種方式的訪問是對(duì)面字典的一對(duì)數(shù)據(jù),輸出結(jié)果是以元組的形式輸出,同時(shí)還可以通過循環(huán)的遍歷直接獲取每一次遍歷的鍵和值。
>>> my_dict ={1001:'小明',1002:'小華',1003:'小張'} >>> for i,j in my_dict.items(): print('對(duì)應(yīng)鍵:',i,'對(duì)應(yīng)值:',j) 對(duì)應(yīng)鍵: 1001 對(duì)應(yīng)值: 小明 對(duì)應(yīng)鍵: 1002 對(duì)應(yīng)值: 小華 對(duì)應(yīng)鍵: 1003 對(duì)應(yīng)值: 小張
關(guān)于字典的遍歷最后通過習(xí)題練習(xí)一下。
3. 字典推導(dǎo)式
前面學(xué)習(xí)過列表推導(dǎo)式,元組推導(dǎo)式和列表推導(dǎo)式類似沒有過多的介紹,因?yàn)樽值湎鄬?duì)來說比較特殊,在這里講解一下字典推導(dǎo)式。
我們先看一個(gè)簡單的使用方式。
>>> my_dict = {i:'dotcpp' for i in range(1,5)} >>> my_dict {1: 'dotcpp', 2: 'dotcpp', 3: 'dotcpp', 4: 'dotcpp'}
在這里我們來看一下字典推導(dǎo)式的結(jié)構(gòu),第一部分等同于每一個(gè)i的值對(duì)象都用‘dotcpp’來賦值,我們也可以先定義一個(gè)列表,把列表中的值賦予它。
>>> my_list = [10,20,30,40,50] >>> my_dict = {i:my_list[i] for i in range(1,5)} >>> my_dict {1: 20, 2: 30, 3: 40, 4: 50}
看下圖:
在使用字典推導(dǎo)式的時(shí)候主要鍵與值的相匹配問題,在后面我們學(xué)習(xí)過函數(shù)之后可以使用zip()函數(shù)能夠更方便的進(jìn)行字典的組合,在這里就不做過多的介紹。
4. 習(xí)題
要求用戶輸入總資產(chǎn),例如: 3000,然后顯示購物車列表,計(jì)算購物車商品總金額,如果商品總額大于總資產(chǎn),提示賬戶余額不足,否則,購買成功。購物車列表如下:carts=[{"name":"床","price":1999,”num”:1},{"name":"枕頭","price":10, ” num”:2},{"name":"被子","price":20, ”num”:1}]。
題解在最后。
5. 總結(jié)
學(xué)習(xí)Python的時(shí)候字典屬于一個(gè)相對(duì)來說比較常用的數(shù)據(jù)結(jié)構(gòu),但是由于它的獨(dú)特性,在競賽題目中關(guān)于字典的可能相對(duì)較少,在Python課程學(xué)習(xí)考察中會(huì)比較多,在數(shù)據(jù)存儲(chǔ)的時(shí)候我們借助字典能幫我們準(zhǔn)確的找到相應(yīng)的數(shù)據(jù),熟練的掌握列表和字典能夠幫助我們更好的學(xué)習(xí)Python。
6.例題題解
carts=[ {"name":"床","price":1999,”num”:1}, {"name":"枕頭","price":10, ”num”:2}, {"name":"被子","price":20, ”num”:1} ]。 m = int(input()) sum = 0 for i in range(len(carts)): sum = carts[i]['price'] * carts[i]['num'] + sum if m >= sum: print('購買成功') else: print('賬戶余額不足')
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進(jìn)階課程
從零到寫出一個(gè)爬蟲的Python編程課程
只會(huì)語法寫不出代碼?手把手帶你寫100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程