美文网首页
Python入门:字典

Python入门:字典

作者: 洋阳酱 | 来源:发表于2019-05-28 15:02 被阅读0次

    七、字典

    本章内容运行环境: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入门:字典

          本文链接:https://www.haomeiwen.com/subject/twldtctx.html