Python入門:字典

七眼刃、字典

本章內(nèi)容運(yùn)行環(huán)境:Jupyter Notebook
本單元視頻鏈接:https://v.youku.com/v_show/id_XNDYyOTMzMjQ0MA==.html

7.1 字典定義

字典是一組無序鍵值對(duì)的集合

假設(shè)我們?cè)谝粋€(gè)英語網(wǎng)站學(xué)習(xí)足画,每天會(huì)背單詞捏境、做聽力、做閱讀〉乖矗現(xiàn)在有一組數(shù)據(jù):你背了單詞(bdc) 30個(gè)砰粹;做了聽力(listen)5句;做了閱讀(read)2篇嗡善。我們可以創(chuàng)建一個(gè)study的字典將它們存放:

study = {"bdc":30, "listen":5, "read":2}
  1. 字典用 {} 包裹
  2. 其中"bdc" : 30為一對(duì)鍵值對(duì),其中"bdc"為鍵(key)学歧,30 為值(value)
  3. 每對(duì)鍵值對(duì)由英文逗號(hào),隔開
  4. 最好在每一個(gè)逗號(hào)與下一個(gè)鍵值對(duì)之間用空格相隔罩引,方讀代碼。

7.2 創(chuàng)建字典

在 Python 字典中:
鍵可以是字符串枝笨,也可以是數(shù)值
值可以是任何數(shù)據(jù)類型:字符串袁铐、數(shù)值揭蜒、列表,甚至還可以是字典

shanbey = {"study": {"bdc": {"num_today": 25, "used_time": 5.0}, "listen": {"num_today": 0,"used_time": 0}}}
print(shanbey)

這邊展示了一個(gè)字典昭躺,value還是字典的例子(一般網(wǎng)頁數(shù)據(jù)都長這樣)忌锯。我們拆解一下這個(gè)字典

"study": 
    {
    "bdc": 
        {
        "num_today": 25,
        "used_time": 5.0
        }, 
    "listen": 
        {
        "num_today": 0,
        "used_time": 0
        }
    }

空字典

study = {}
type(study)
# 輸出:dict

合并列表

zip()創(chuàng)建字典:用zip() 將兩個(gè)列表合并為一個(gè)字典

name = ["bdc", "listen", "read", "sentence"]
number = [30, 5, 2, 10]
zip_study = zip(name, number)
study = {key:value for key,value in zip_study}
print(study)
# 輸出:{'bdc': 30, 'listen': 5, 'read': 2, 'sentence': 10}

先用zip()將列表 namenumber合并在變量zip_study 中伪嫁。(在【4.3 列表】里講過zip的用法)
接著领炫,遍歷 zip_study,把name作為key张咳,number作為值

key:value for key,value in zip_study

這用到了我們之前提到的列表推導(dǎo)式(5.2節(jié))帝洪,我們可以把這行代碼分開,理解為

for key,value in zip_study:
    key:value  #這是字典組成的樣子

7.3 為字典添加鍵

添加新鍵:用以下語句為字典添加新鍵

study = {'bdc': 30, 'listen': 5, 'read': 2}

# 字典[新鍵] = 新值
study['sentence'] = 10

print(study)
# 輸出:{'bdc': 30, 'listen': 5, 'read': 2, 'sentence': 10}

.update():用 .update() 一次性向字典加入多對(duì)鍵值對(duì)

study = {'bdc': 30}
study.update({ 'listen': 5, 'read': 2, 'sentence': 10}) 
print(study)
# 輸出:{'bdc': 30, 'listen': 5, 'read': 2, 'sentence': 10}

更新字典值:如果有一個(gè)鍵對(duì)應(yīng)的值需要變動(dòng)脚猾,用添加鍵時(shí)的方法葱峡,重新為該鍵賦新值

study = {'bdc': 30, 'listen': 5, 'read': 2, 'sentence': 10}
study['sentence'] = 200
print(study)
# 輸出:{'bdc': 30, 'listen': 5, 'read': 2, 'sentence': 200}

7.4 字典取值

可以通過字典的鍵來獲取其對(duì)應(yīng)的值:字典[鍵]

study = {'bdc': 30, 'listen': 5, 'read': 2, 'sentence': 10}
print(study['sentence'])
# 輸出:10

字典無效鍵:當(dāng)取字典鍵值時(shí),如果鍵并不存在于字典中龙助,該鍵無效砰奕,計(jì)算機(jī)會(huì)返回錯(cuò)誤。

study = {'listen': 5, 'read': 2, 'sentence': 10}
print(study['bdc'])
# KeyError: 'bdc' 提鸟,系統(tǒng)會(huì)報(bào)錯(cuò)

.get():根據(jù)鍵來取字典中相應(yīng)的值

如果鍵不存在于字典中军援,.get() 默認(rèn)返回 None
當(dāng)鍵不存在于字典中時(shí),也可以手動(dòng)設(shè)置返回值

study = {'listen': 5, 'read': 2, 'sentence': 10}
print(study.get('listen'))  # 輸出:5
print(study.get('bdc'))  # 輸出:None
print(study.get('bdc','沒有背單詞'))  # 輸出:沒有背單詞

7.5 try 和 except

tryexcept條件判斷称勋,幫助檢查代碼中可能存在的錯(cuò)誤

計(jì)算機(jī)會(huì)先執(zhí)行 try條件下的語句胸哥,一旦出現(xiàn)例外情況,比如錯(cuò)誤 NameError 或者 ValueError赡鲜,計(jì)算機(jī)會(huì)終止執(zhí)行 try條件下的語句空厌,并且當(dāng)該例外情況滿足 except中指定的條件,計(jì)算機(jī)會(huì)執(zhí)行except 中的語句银酬。

try/except取值:如果字典中沒有相應(yīng)的鍵嘲更,還可以用try/except的方法來捕獲 KeyError 的出現(xiàn)。

study = {'listen': 5, 'read': 2, 'sentence': 10}
try:
    print(study['bdc'])
except:
    print("沒有背單詞")
# 輸出:沒有背單詞

7.6 刪除字典鍵

.pop() :刪除字典中的鍵及其值

如果需要?jiǎng)h除的鍵不在字典之中揩瞪,在 .pop() 方法中加上對(duì)應(yīng)的參數(shù)赋朦,.pop() 返回該參數(shù)

study = {'bdc': 30, 'listen': 5, 'read': 2, 'sentence': 10}
print(study.pop('sentence')) # 輸出:10
print(study) 
# 輸出:{'bdc': 30, 'listen': 5, 'read': 2}

7.7 獲取所有的鍵和值

獲取字典所有的鍵

我們可以用兩種方法獲得字典中所有的鍵。

list(目標(biāo)字典)

study = {'bdc': 30, 'listen': 5, 'read': 2, 'sentence': 10}
print(list(study))
# ['bdc', 'listen', 'read', 'sentence']

.keys()

study = {'bdc': 30, 'listen': 5, 'read': 2, 'sentence': 10}
for name in study.keys():
    print(name)
# 輸出:
bdc
listen
read
sentence

列表推導(dǎo)式

study = {'bdc': 30, 'listen': 5, 'read': 2, 'sentence': 10}
name = [key for key in study.keys()]
print(name)
# 輸出:['bdc', 'listen', 'read', 'sentence']

獲得字典所有的值

.values() 獲得字典中所有的值

study = {'bdc': 30, 'listen': 5, 'read': 2, 'sentence': 10}
for number in study.values():
    print(number)
# 輸出:
30
5
2
10

列表推導(dǎo)式

study = {'bdc': 30, 'listen': 5, 'read': 2, 'sentence': 10}
number = [value for value in study.values()]
print(number)
# 輸出:[30, 5, 2, 10]

獲得字典中所有的鍵值對(duì)

.items()獲取字典中的所有鍵值對(duì)

study = {'bdc': 30, 'listen': 5, 'read': 2, 'sentence': 10}
for key,value in study.items():
    print("學(xué)習(xí)"+key+"的數(shù)量為"+str(value))
# 輸出:
# 學(xué)習(xí)bdc的數(shù)量為30
# 學(xué)習(xí)listen的數(shù)量為5
# 學(xué)習(xí)read的數(shù)量為2
# 學(xué)習(xí)sentence的數(shù)量為10

7.8 字典所有方法

dir(dict)
 'clear',
 'copy',
 'fromkeys',
 'get',  # 根據(jù)鍵來取字典中相應(yīng)的值
 'items',  # 獲取字典中的所有鍵值對(duì)
 'keys',  # 獲取字典中的所有鍵
 'pop',  # 刪除
 'popitem',
 'setdefault',
 'update',  # 更新多對(duì)鍵值對(duì)
 'values'  # 獲取字典中的所有值

7.9 實(shí)踐:清洗扇貝打卡數(shù)據(jù)

清洗扇貝打卡數(shù)據(jù)

扇貝打卡數(shù)據(jù):https://www.shanbay.com/api/v1/checkin/user/------/ 壮韭,最后一部分北发,是你的扇貝ID

import requests  # 導(dǎo)入requests模塊
ID = "16888030"  # 扇貝ID
web = "https://www.shanbay.com/api/v1/checkin/user/"+str(ID)+"/"  # 網(wǎng)址:打卡記錄
res = requests.get(web)  # requests發(fā)起請(qǐng)求,靜態(tài)網(wǎng)頁用get
LearningData = res.json()  # LearningData就是字典格式

NickName = LearningData['data'][0]['user']['nickname']  # 獲取昵稱

for LearningDataDaily in LearningData['data']:
    checkin_date =  LearningDataDaily['checkin_date']
    try:
        bdc_num_today = LearningDataDaily['stats']['bdc']['num_today']
        bdc_used_time = LearningDataDaily['stats']['bdc']['used_time']
    except:  
        bdc_num_today = 0
        bdc_used_time = 0.0        
    print("{}喷屋,{}背單詞{}個(gè)琳拨,用時(shí){}分鐘".format(checkin_date,NickName,bdc_num_today,bdc_used_time))
    
# 輸出:
2020-04-09,洋陽背單詞25個(gè)屯曹,用時(shí)5.0分鐘
2020-04-08狱庇,洋陽背單詞25個(gè)惊畏,用時(shí)28.0分鐘
2020-04-07,洋陽背單詞45個(gè)密任,用時(shí)6.0分鐘
2020-04-06颜启,洋陽背單詞25個(gè),用時(shí)19.0分鐘
2020-04-05浪讳,洋陽背單詞25個(gè)缰盏,用時(shí)6.0分鐘
2020-04-04,洋陽背單詞25個(gè)淹遵,用時(shí)6.0分鐘
2020-04-03口猜,洋陽背單詞25個(gè),用時(shí)6.0分鐘
2020-04-02透揣,洋陽背單詞25個(gè)济炎,用時(shí)17.0分鐘
2020-04-01,洋陽背單詞0個(gè)辐真,用時(shí)0.0分鐘
2020-03-31须尚,洋陽背單詞25個(gè),用時(shí)15.0分鐘
2020-03-30侍咱,洋陽背單詞25個(gè)耐床,用時(shí)7.0分鐘
2020-03-29,洋陽背單詞25個(gè)放坏,用時(shí)10.0分鐘
2020-03-28咙咽,洋陽背單詞0個(gè),用時(shí)0.0分鐘
2020-03-27淤年,洋陽背單詞25個(gè)钧敞,用時(shí)8.0分鐘
2020-03-26,洋陽背單詞25個(gè)麸粮,用時(shí)15.0分鐘
2020-03-25溉苛,洋陽背單詞25個(gè),用時(shí)12.0分鐘
2020-03-24弄诲,洋陽背單詞25個(gè)愚战,用時(shí)13.0分鐘
2020-03-23,洋陽背單詞25個(gè)齐遵,用時(shí)67.0分鐘
2020-03-22寂玲,洋陽背單詞0個(gè),用時(shí)0.0分鐘
2020-03-21梗摇,洋陽背單詞0個(gè)拓哟,用時(shí)0.0分鐘

請(qǐng)?jiān)谧鳂I(yè)的最后一行輸出:

昵稱:第6節(jié)課作業(yè)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市伶授,隨后出現(xiàn)的幾起案子断序,更是在濱河造成了極大的恐慌流纹,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件违诗,死亡現(xiàn)場(chǎng)離奇詭異漱凝,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)诸迟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門茸炒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人亮蒋,你說我怎么就攤上這事扣典。” “怎么了慎玖?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長笛粘。 經(jīng)常有香客問我趁怔,道長,這世上最難降的妖魔是什么薪前? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任润努,我火速辦了婚禮,結(jié)果婚禮上示括,老公的妹妹穿的比我還像新娘铺浇。我一直安慰自己,他們只是感情好垛膝,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布鳍侣。 她就那樣靜靜地躺著,像睡著了一般吼拥。 火紅的嫁衣襯著肌膚如雪倚聚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天凿可,我揣著相機(jī)與錄音惑折,去河邊找鬼。 笑死枯跑,一個(gè)胖子當(dāng)著我的面吹牛惨驶,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播敛助,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼粗卜,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了辜腺?” 一聲冷哼從身側(cè)響起休建,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤乍恐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后测砂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茵烈,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年砌些,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了呜投。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡存璃,死狀恐怖仑荐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情纵东,我是刑警寧澤粘招,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站偎球,受9級(jí)特大地震影響洒扎,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜衰絮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一袍冷、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧猫牡,春花似錦胡诗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至亩进,卻和暖如春症虑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背归薛。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來泰國打工谍憔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人主籍。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓习贫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親千元。 傳聞我的和親對(duì)象是個(gè)殘疾皇子苫昌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1.基本使用 1.1 數(shù)據(jù)類型 常用數(shù)據(jù)類型 Common Data Types 其他類型 Others 1.2 ...
    suwi閱讀 1,356評(píng)論 0 3
  • 本篇筆記知識(shí)點(diǎn):字典基本概念字典鍵(key)的特性字典的創(chuàng)建字典的增刪改查 字典的基本概念 字典一種key - v...
    古月半半閱讀 843評(píng)論 0 2
  • 一祟身、概要 字典是Python語言中唯一的映射類型奥务。在其他語言里例如在c語言里叫 聯(lián)合內(nèi)存 ( associativ...
    唯老閱讀 565評(píng)論 1 6
  • (一)、主要內(nèi)容 1.1秽澳、列表 1.2闯睹、元祖 1.3、字典 1.4担神、集合列表 楼吃、字典、元祖杏瞻、集合 (二)所刀、列表 2...
    IIronMan閱讀 3,557評(píng)論 0 7
  • 23) 雪秀在柯景泉自己的屋子里,把在山麓上面看到美麗的山茶花告訴父親捞挥。 "雪秀,你如果這么喜歡山茶花就得早上起來...
    陳雨池閱讀 175評(píng)論 0 1