• Python基础(五)


    今日主要内容

    • 字典
    • 字典嵌套

    一、字典(dict)

    (一)什么是字典

    • 字典是可变类型数据,可迭代数据类型,无序的数据结构

    • 字典可以存储大量的数据,存储量要比列表还大

    • 字典利用键值对将数据关联起来

      • 第一个键值对的值是第二个键值对的键,所有数据相关联
      dic = {"ZXD": "hobby", "hobby": "play", "play": "DNF"}
      s = dic[dic[dic["ZXD"]]]
      print(s)
      
    • 字典是根据key查找value,所以字典的查找速度要比列表快得多的多

    • 字典所有的操作都是针对key进行的

    • 字典的键是可哈希的(不可变类型),且唯一的,定义字典时若输入重复的键,取最后一个键值对

      • 不可变类型数据是可哈西的
      • 可变类型数据是不可哈希的

    (二)字典的增

    • dict[key] = value 利用key添加键值对
      dict.setdefault(key, value) 若字典中无key,则添加key:value
    1. dict[key] = value

      • 利用键添加键值对
      dic = {"name": "ZXD", "age": 23, "sex": "man"}
      dic["hobby"] = "漂亮年轻的小姐姐"
      print(dic)
      # {'name': 'ZXD', 'age': 23, 'sex': 'man', 'hobby': '漂亮年轻的小姐姐'}
      
    2. dict.setdefault(key, value)

      • 有两个参数,第一个是必填参数,需填入key;第二个参数默认为None,可填入value
      • 此方法有返回值,返回的是key的value
      • 在字典中查找有无此key,如果有,则返回key对应的value
      • 若没有,将此key添加到字典中。若填入第二个参数,则作为此key的value,若没有此键的值为None
      dic = {"name": "ZXD", "age": 23, "sex": "man"}
      res1 = dic.setdefault("age", 18)
      res2 = dic.setdefault("hobby", "漂亮年轻的小姐姐")
      print(res1)  # 23
      print(res2)  # 漂亮年轻的小姐姐
      print(dic)
      # {'name': 'ZXD', 'age': 23, 'sex': 'man', 'hobby': '漂亮年轻的小姐姐'}
      

    (三)字典的删

    • dict.pop(key) 根据key删除键值对
      dict.popitem() 随即删除键值对
      dict.clear() 清空字典
      del 各种删除
    1. dict.pop(key)

      • 根据key删除字典中的键值对
      • 此方法有返回值,返回的是删除的键对应的值
      dic = {"name": "ZXD", "age": 23, "sex": "man"}
      det = dic.pop("sex")
      print(det)  # man
      print(dic)  # {'name': 'ZXD', 'age': 23}
      
    2. dict.popitem()

      • 随即删除字典中的键值对,但是python3.6及以上版本默认删除最后一个键值对
      • 此方法没有参数,填入参数会报错
      • 此方法有返回值,以元组的形式返回随即删除的键值对
      dic = {"name": "ZXD", "age": 23, "sex": "man"}
      det = dic.popitem()
      print(det)  # ('sex', 'man')
      print(dic)  # {'name': 'ZXD', 'age': 23}
      
    3. dict.clear()

      • 清空字典
      dic = {"name": "ZXD", "age": 23, "sex": "man"}
      dic.clear()
      print(dic)  # {}
      
    4. del

      • 各种删除
      dic = {"name": "ZXD", "age": 23, "sex": "man"}
      del dic["sex"]
      print(dic)  # {'name': 'ZXD', 'age': 23}
      del dic
      print(dic)  # NameError: name 'dic' is not defined
      

    (四)字典的改

    • dict[key] = value 利用key修改value
      dict1.update(dict2) 将dict2更新到dict1中
    1. dict[key] = value

      • 利用key修改value
      • 若要修改key,需要删除此键值对,并新增
      dic = {"name": "ZXD", "age": 23, "sex": "man"}
      dic["sex"] = "superman"
      print(dic)  # {'name': 'ZXD', 'age': 23, 'sex': 'superman'}
      
    2. dict1.update(dict2)

      • 将dict2更新到dict1中:
        • 若key存在,更新key对应的value
        • 若key不存在,将键值对添加到dict1中
      dic1 = {"name": "ZXD", "age": 23}
      dic2 = {"sex": "man", "age": 18}
      dic1.update(dic2)
      print(dic1)  # {'name': 'ZXD', 'age': 18, 'sex': 'man'}
      

    (五)字典的查

    • dict[key] 通过key查看value
      dict.get() 查询key对应的值
      dict.setdefault(key, value) 查询key对应的值
    1. dict[key]

      • 通过key查询键对应的值
      • 若key不在字典中,会报错
      dic = {"name": "ZXD", "age": 23, "sex": "man"}
      print(dic["name"])  # ZXD
      print(dic["hobby"])  # KeyError: 'hobby'
      
      
      
    2. dict.get()

      • 有两个参数,第一个参数是必填参数,需填入key值,第二个参数默认为None,可填入value
      • 查找字典中有无此key,如果有,返回键对应的值
      • 如果没有,返回None,若有第二个参数,返回第二个参数
      dic = {"name": "ZXD", "age": 23, "sex": "man"}
      res1 = dic.get("name")
      res2 = dic.get("hobby", "没有爱好")
      print(res1)  # ZXD
      print(res2)  # 没有爱好
      
      
    3. dict.setdefault(key, value)

      • 有两个参数,第一个是必填参数,需填入key;第二个参数默认为None,可填入value
      • 此方法有返回值,返回的是key的value
      • 在字典中查找有无此key,如果有,则返回key对应的value
      • 若没有,将此key添加到字典中。若填入第二个参数,则作为此key的value,若没有此键的值为None
      dic = {"name": "ZXD", "age": 23, "sex": "man"}
      res1 = dic.setdefault("age", 18)
      res2 = dic.setdefault("hobby", "漂亮年轻的小姐姐")
      print(res1)  # 23
      print(res2)  # 漂亮年轻的小姐姐
      print(dic)
      # {'name': 'ZXD', 'age': 23, 'sex': 'man', 'hobby': '漂亮年轻的小姐姐'}
      
      

    (六)字典的其他操作

    • 解构

      • 把线性结构的元素解开,并顺序的赋给其他变量,左边接纳的要与右边解开的个数一致
      a, b, c = 1, 2, 3  # 解构的过程
      print(a)
      print(b)
      print(c)
      
      
      • 如果变量名和变量数量不对应,在结构的过程中会报错
      a, b = 1, 2, 3, 4
      print(a, b)  # ValueError: too many values to unpack (expected 2)
      
      
      • 赋值的过程中,*表聚合
      • 输出的过程中,*表打散
      a, *b = 1, 2, 3, 4
      print(a, b)  # 1 [2, 3, 4]
      print(a, *b)  # 1 2 3 4
      
      
    • dict.keys() 得到所有键
      dict.values() 得到所有值
      dict.items() 得到所有键值对
    1. dict.keys()

      • 获取字典所有的key,得到的是一个伪列表
      • 得到的是一个可迭代对象,可以用for循环进行遍历
      dic = {"name": "ZXD", "age": 23, "sex": "man"}
      print(dic.keys())  # dict_keys(['name', 'age', 'sex'])
      
      for el in dic.keys():
      	print(el, end=" ")  # name age sex
      
      
    2. dict.values()

      • 获取字典所有的value,得到的是一个伪列表
      • 得到的是一个可迭代对象,可以用for循环进行遍历
      dic = {"name": "ZXD", "age": 23, "sex": "man"}
      print(dic.values())  # dict_values(['ZXD', 23, 'man'])
      
      for el in dic.values():
      	print(el, end=" ")  # ZXD 23 man 
      
      
    3. dict.items()

      • 获取字典所有的键值对,以元组形式存储,得到的是一个伪列表
      • 得到的是一个可迭代对象,可以用for循环进行遍历
      dic = {"name": "ZXD", "age": 23, "sex": "man"}
      print(dic.items())
      # dict_items([('name', 'ZXD'), ('age', 23), ('sex', 'man')])
      
      for el in dic.items():
      	print(el, end=" ")  
      # ('name', 'ZXD') ('age', 23) ('sex', 'man') 
      
      
      • 利用解构
      dic = {"name": "ZXD", "age": 23, "sex": "man"}
      for key, value in dic.items():
      	print(key, value)
      
      
      运行结果:
      name ZXD
      age 23
      sex man
      
      

    二、字典嵌套

    • 核心思想:无论嵌套多少字典,一层一层利用key就可以找到value

      dic = {
          "7点": {"晨练": ["跑步", "拉伸"]},
          "7点45": {"洗漱": ["洗头", "刷牙"], "吃早餐": ["面包", "牛奶"]},
          "8点30": {"上课": {"课前": ["回顾", "预习"], "上课": "认真听讲"}, "下课": ["休息", "敲代码"]},
          "12点30": ["吃午饭", "午休"],
          "14点30": {"自习": ["整理笔记", "写作业"]},
          "18点30": ["吃晚饭", "休息"],
          "19点30": {"自习": ["预习", "看视频"]},
      }
      
      # 想找到"敲代码"
      print(dic["8点30"]["下课"][1])  # 敲代码
      
      
  • 相关阅读:
    真正的成长就是颠覆你以前的世界观
    别蠢到用暴露自己软肋的方式,去表达你对别人的信任
    微信企业号的JAVA开发平台
    谁的青春不迷茫
    我才懒得去想我十年后是什么样子,我只在乎十年后的自己怎么看现在的我。
    2016年03月书单
    在人山人海里,你不必记得我
    Android模拟器Intel Atom下载安装配置
    Git与TortoiseGit使用方法
    Android开发环境搭建
  • 原文地址:https://www.cnblogs.com/tianlangdada/p/11518656.html
Copyright © 2020-2023  润新知