• Day 05 字典的初识:字典的使用:字典的嵌套


    01 今日内容大纲

    • 字典的初识
    • 字典的使用(增删改查)
    • 字典的嵌套

    02 内容回顾以及作业讲解

    • 列表:容器型数据类型,可以承载大量的数据,有序的数据
      • 增:

        • append 追加
        • insert 插入
        • extend 迭代这追加
        • pop 按索引删除 有返回值,默认删最后一个
        • remove 按照元素删除
        • clear 清空列表
        • del 索引,切片,步长
        • l1[1] = '大壮'

        • l1[1:3] = 'faasddfa'
          l1 = ['太白', '女神', '吴老师', 'xiao', '闫龙']
          l1[1:3] = 'faasddfa'
          print(l1)

          #['太白', 'f', 'a', 'a', 's', 'd', 'd', 'f', 'a', 'xiao', '闫龙']
          
        • l1[1:4:2] = '太白'

      • 查:索引,切片,for 循环

    • 元组:只读列表,(),拆包
    • range:可以看作自己控制范围的数字列表 可以索引

    03 具体内容

    • 字典的初识:
      • why:

        • 列表可以存储大量的数据,数据之间的关联性不强
          • ['太白', 18, '男', '大壮', 3, '男']
        • 列表的查询速度比较慢
      • what:容器型数据类型:dict

      • how:

        • 数据类型的分类(可变不可变):
          • 可变(不可哈希)的数据类型:list dict set
          • 不可变(可哈希)的数据类型:str bool int tuple
        • 字典:{}括起来。以键值对的形式储存的容器型数据类型:
          dic = {'太白': {'name':'太白金星','age':18,'sex':'男'},'python':['asda','asdas','asdaf','asdasdafgg']}
        • 键必须是不可变的数据类型(可哈希):int, str,(bool和tuple几乎不用) 唯一的。
        • 值可以是任意数据类型,对象
        • 字典3.5x版本之前是无序的
        • 字典3.6x会按照初次建立字典的顺序排列,学术上不认为是有序的。
        • 字典3.7x以后都是有序的
        • 字典的优点:查阅速度非常快,存储关联性的数据
        • 字典的缺点:以空间换时间。
      • 字典的创建方式:
        #面试会考
        # 方式一:
        dic = dict((('one',1),('two',2),('three',3)))
        print(dic) #{'one': 1, 'two': 2, 'three': 3}

        # 方式二:
        dic = dict(one=1,two=2,three=3)
        print(dic)		#{'one': 1, 'two': 2, 'three': 3}
        
        # 方式三:
        dic = dict({'one':1,'two':2,'three':3})
        print(dic)		#{'one': 1, 'two': 2, 'three': 3}
        
      • 验证字典的合法性:
        dic = {[1,2,3]:'alex',1:666} #键要为不可变的数据类型
        print(dic) #报错

        dic = {1:'alex',1:'太白',3:'wusir'}
        print(dic)            #{1: '太白', 3: 'wusir'}
        
      • 字典的增删改查


        • dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']}

          # 直接增加 有则改之,无则增加
          dic['sex'] = '男'
          dic['age'] = 23    # 改
          print(dic)
          
          #setdefault 有则不变,无则增加
          dic.setdefault('hobby')       #无则增加
          dic.setdefault('hobby','球类运动')       #无则增加
          dic.setdefault('age',45)      #有则不变
          print(dic)
          

        • dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']}

          # pop 按照键删除键值对,有返回值 ***
          # 设置第二个参数,则无论字典有无此键都不会报错
          dic.pop('age')
          ret = dic.pop('age')   #ret 返回值
          ret = dic.pop('hobby','没有此键')
          print(ret)
          print(dic)
          
          # clear 清空 **
          dic.clear()
          print(dic)     #{}
          
          # del **
          del dic['age']
          del dic['age1']  #报错
          print(dic)
          

        • dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']}

          dic['name'] = 'alex'
          print(dic)
          
        • 查 get 获取(建议)
          dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']}

          l1 = dic.get('hobby_list')      #['直男', '钢管', '开车']
          l2 = dic.get('hobby_list111','没有此键')        #没有此键  #可以设置返回值
          print(l1)
          print(l2)
          
        • 查(不建议)
          dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']}

          print(dic['hobby_list'])    #['直男', '钢管', '开车']
          print(dic['hobby_list1'])   #报错  KeyError: 'hobby_list1'
          
        • 三个特殊的 keys() values() items() ***
          dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']}

          1.#keys()
          print(dic.keys(),type(dic.keys()))	#dict_keys(['name', 'age', 'hobby_list']) <class 'dict_keys'>   #所有的键
          
          #可以转化成列表
          print(list(dic.keys()))		#['name', 'age', 'hobby_list']
          for i in list(dic.keys()):
              print(i)
          '''
          name
          age
          hobby_list
          '''
          2.#values
          print(list(dic.values()))		#['太白', 18, ['直男', '钢管', '开车']]
          for i in list(dic.values()):
              print(i)
          '''
          太白
          18
          ['直男', '钢管', '开车']
          '''
          
          3.#items
          print(dic.items())		#dict_items([('name', '太白'), ('age', 18), ('hobby_list', ['直男', '钢管', '开车'])])
          print(list(dic.items()))	#[('name', '太白'), ('age', 18), ('hobby_list', ['直男', '钢管', '开车'])]
          for i in list(dic.items()):
              print(i)
          '''
          ('name', '太白')
          ('age', 18)
          ('hobby_list', ['直男', '钢管', '开车'])
          '''
          for key,value in dic.items():
              print(key,value)
          '''
          name 太白
          age 18
          hobby_list ['直男', '钢管', '开车']
          '''
          
          a,b = ('name','太白')
          print(a,b)		#name 太白
          
          #面试题:
          a = 18
          b = 12
          #如何一行程序让a,b互换值
          a,b = b,a #答案
          print(a,b)
          
      • 相关练习题
        dic = {'k1': "v1", "k2": "v2", "k3": [11,22,33]}
        # 请在字典中添加一个键值对,"k4": "v4",输出添加后的字典
        dic.setdefault('K4','V4')
        dic['k4'] ='v4'
        print(dic)

        # 请在修改字典中 "k1" 对应的值为 "alex",输出修改后的字典
        dic['k1'] = 'alex'
        print(dic)
        
        # 请在k3对应的值中追加一个元素 44,输出修改后的字典
        dic.get('k3').append(44)
        print(dic)
        
        # 请在k3对应的值的第 1 个位置插入个元素 18,输出修改后的字典
        dic.get('k3').insert(-4,18)
        print(dic)
        
      • 字典的嵌套
        dic = {
        'name': '汪峰',
        'age': 48,
        'wife': [{'name': '国际章', 'age': 38},],
        'children': {'girl_first': '小苹果','girl_second': '小怡','girl_three': '顶顶'}
        }

        # 1. 获取汪峰的名字。
        print(dic.get('name'))
        # 2.获取这个字典:{'name':'国际章','age':38}。
        print(dic.get('wife')[0])
        # 3. 获取汪峰妻子的名字。
        print(dic.get('wife')[0].get('name'))
        # 4. 获取汪峰的第三个孩子名字。
        print(dic.get('children').get('girl_three'))
        
        dic1 = {
        'name' : ['alex',2,3,5],
        'job' :  'teacher',
        'oldboy' : {'alex':['python1','python2',100]}
        }
        # 1.将name对应的列表追加一个元素'wusir'
        dic1.get('name').append('wusir')
        print(dic1)
        # 2.将name对应的列表中的alex字母大写
        dic1.get('name')[0] = dic1.get('name')[0].upper()
        print(dic1)
        # 3.oldboy对应的字典加一个键值对'老男孩','linux'
        dic1.get('oldboy').setdefault('老男孩','linux')
        print(dic1)
        # 4.将oldboy对应的字典中的alex对应的列表中的python2删除
        del dic1.get('oldboy').get('alex')[1]
        print(dic1)
        

    04 今日总结

    • 字典: 查询速度快,数据的关联性强
      • 键不可变数据类型/可希哈(str int)唯一。
      • 值:任意数据类型,对象。
      • 增删改查(全部会默写)***
      • 字典的嵌套***

    05 明日预习内容

    • 明天讲理论性偏多: id is == 小数据池,集合。
  • 相关阅读:
    bzoj1009
    bzoj1576 3694
    bzoj3143
    bzoj1391
    bzoj2729
    bzoj2653
    bzoj3261
    bzoj2326
    人件
    优秀的产品
  • 原文地址:https://www.cnblogs.com/Redbean1231/p/13235970.html
Copyright © 2020-2023  润新知