七眼刃、字典
本章內(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}
- 字典用 {} 包裹
- 其中
"bdc" : 30
為一對(duì)鍵值對(duì),其中"bdc"
為鍵(key)学歧,30
為值(value) - 每對(duì)鍵值對(duì)由英文逗號(hào)
,
隔開 - 最好在每一個(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()
將列表 name
和 number
合并在變量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
try
和 except
條件判斷称勋,幫助檢查代碼中可能存在的錯(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è)