Python入门:字典

七、字典

本章内容运行环境:Jupyter Notebook
本单元视频链接:https://v.youku.com/v_show/id_XNDYyOTMzMjQ0MA==.html

7.1 字典定义

字典是一组无序键值对的集合

假设我们在一个英语网站学习,每天会背单词、做听力、做阅读。现在有一组数据:你背了单词(bdc) 30个;做了听力(listen)5句;做了阅读(read)2篇。我们可以创建一个study的字典将它们存放:

study = {"bdc":30, "listen":5, "read":2}
  1. 字典用 {} 包裹
  2. 其中"bdc" : 30为一对键值对,其中"bdc"为键(key),30 为值(value)
  3. 每对键值对由英文逗号,隔开
  4. 最好在每一个逗号与下一个键值对之间用空格相隔,方读代码。

7.2 创建字典

在 Python 字典中:
键可以是字符串,也可以是数值
值可以是任何数据类型:字符串、数值、列表,甚至还可以是字典

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

这边展示了一个字典,value还是字典的例子(一般网页数据都长这样)。我们拆解一下这个字典

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

空字典

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

合并列表

zip()创建字典:用zip() 将两个列表合并为一个字典

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

这用到了我们之前提到的列表推导式(5.2节),我们可以把这行代码分开,理解为

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() 一次性向字典加入多对键值对

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

更新字典值:如果有一个键对应的值需要变动,用添加键时的方法,重新为该键赋新值

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

7.4 字典取值

可以通过字典的键来获取其对应的值:字典[键]

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

字典无效键:当取字典键值时,如果键并不存在于字典中,该键无效,计算机会返回错误。

study = {'listen': 5, 'read': 2, 'sentence': 10}
print(study['bdc'])
# KeyError: 'bdc' ,系统会报错

.get():根据键来取字典中相应的值

如果键不存在于字典中,.get() 默认返回 None
当键不存在于字典中时,也可以手动设置返回值

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条件判断,帮助检查代码中可能存在的错误

计算机会先执行 try条件下的语句,一旦出现例外情况,比如错误 NameError 或者 ValueError,计算机会终止执行 try条件下的语句,并且当该例外情况满足 except中指定的条件,计算机会执行except 中的语句。

try/except取值:如果字典中没有相应的键,还可以用try/except的方法来捕获 KeyError 的出现。

study = {'listen': 5, 'read': 2, 'sentence': 10}
try:
    print(study['bdc'])
except:
    print("没有背单词")
# 输出:没有背单词

7.6 删除字典键

.pop() :删除字典中的键及其值

如果需要删除的键不在字典之中,在 .pop() 方法中加上对应的参数,.pop() 返回该参数

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(目标字典)

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

列表推导式

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

列表推导式

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

获得字典中所有的键值对

.items()获取字典中的所有键值对

study = {'bdc': 30, 'listen': 5, 'read': 2, 'sentence': 10}
for key,value in study.items():
    print("学习"+key+"的数量为"+str(value))
# 输出:
# 学习bdc的数量为30
# 学习listen的数量为5
# 学习read的数量为2
# 学习sentence的数量为10

7.8 字典所有方法

dir(dict)
 'clear',
 'copy',
 'fromkeys',
 'get',  # 根据键来取字典中相应的值
 'items',  # 获取字典中的所有键值对
 'keys',  # 获取字典中的所有键
 'pop',  # 删除
 'popitem',
 'setdefault',
 'update',  # 更新多对键值对
 'values'  # 获取字典中的所有值

7.9 实践:清洗扇贝打卡数据

清洗扇贝打卡数据

扇贝打卡数据:https://www.shanbay.com/api/v1/checkin/user/------/ ,最后一部分,是你的扇贝ID

import requests  # 导入requests模块
ID = "16888030"  # 扇贝ID
web = "https://www.shanbay.com/api/v1/checkin/user/"+str(ID)+"/"  # 网址:打卡记录
res = requests.get(web)  # requests发起请求,静态网页用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("{},{}背单词{}个,用时{}分钟".format(checkin_date,NickName,bdc_num_today,bdc_used_time))
    
# 输出:
2020-04-09,洋阳背单词25个,用时5.0分钟
2020-04-08,洋阳背单词25个,用时28.0分钟
2020-04-07,洋阳背单词45个,用时6.0分钟
2020-04-06,洋阳背单词25个,用时19.0分钟
2020-04-05,洋阳背单词25个,用时6.0分钟
2020-04-04,洋阳背单词25个,用时6.0分钟
2020-04-03,洋阳背单词25个,用时6.0分钟
2020-04-02,洋阳背单词25个,用时17.0分钟
2020-04-01,洋阳背单词0个,用时0.0分钟
2020-03-31,洋阳背单词25个,用时15.0分钟
2020-03-30,洋阳背单词25个,用时7.0分钟
2020-03-29,洋阳背单词25个,用时10.0分钟
2020-03-28,洋阳背单词0个,用时0.0分钟
2020-03-27,洋阳背单词25个,用时8.0分钟
2020-03-26,洋阳背单词25个,用时15.0分钟
2020-03-25,洋阳背单词25个,用时12.0分钟
2020-03-24,洋阳背单词25个,用时13.0分钟
2020-03-23,洋阳背单词25个,用时67.0分钟
2020-03-22,洋阳背单词0个,用时0.0分钟
2020-03-21,洋阳背单词0个,用时0.0分钟

请在作业的最后一行输出:

昵称:第6节课作业

你可能感兴趣的:(Python入门:字典)