百星不如一越

导航

python day05笔记

day05内容大纲

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

昨日内容回顾

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

    • 增:

      • append 追加
      • insert 插入
      • extend 迭代着追加
    • 删:

      • pop 按照索引删除,有返回值,默认删除最后一个
      • remove 按照元素删除
      • clear 清空列表
      • del 索引,切片(步长)
      • l1[1] = '大壮'
      • l1[1:3] = 'asdasd
      • l1[1:4:2]' = '太白
    • 查:索引,切片(步长)

  • 元组:只读列表(),拆包

  • range:看作:可以自己控制范围的数字列表,但是它不是列表

    • l1 = range(5)
      print(l1[1:3])  # range(1, 3)
      print(l1[-1])   # 4
      print(range(1, 5, -1))  # 没值
      

今日内容

1.字典的初识

  • why:

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

  • how:

    • 数据类型的分类(可变与不可变):

      • 可变(不可哈希)的数据类型:list dict set

        • l1 = [1, 2, 3]
          l1.append(666)
          print(l1)
          
      • 不可变(可哈希)的数据类型:str bool int tuple

        • s = 'alex'
          s2 = s.upper()
          print(s, s2)  # 对原对象没有任何改变
          
          i = 100
          i = 101
          i = 102  # 只改变i的指向,100、101不会消失,都会在内存中占用空间
          
    • 字典:{}括起来,以键值对形式存储的容器型数据类型

      • # 键值对:
            # 酒店:
            # 键:房间号,0~99
            # 值:房间:里面放什么数据都可以
        
        dic = {'太白': 
             {'name': '太白金星', 'age': 18, 'sex': '男'}, 
         'python22期':['朱光亚', '大壮', '雪飞', '岑哥'], 
         }
        
    • 键必须是不可变的数据类型:str int (bool tuple几乎不用), 还是唯一的

    • 值可以是任意数据类型,对象

    • 字典在3.5版本之前(包括3.5)是无序的

    • 字典3.6x会按照初次建立字典的顺序排列,学术上不认为是有序的

    • 字典3.7x以后都是有序的

    • 字典的优点:查询速度非常快,存储关联性的数据

    • 字典的缺点:以空间换时间

  • 字典的创建方式:

    • # 方式一:dict() 一个元组里几个小元组,分别是键值对
      dic = dict((('one', 1), ('two', 2), ('three', 3)))
      print(dic)
      
    • # 方式二:
      dic = dict(one=1, two=2, three=3)
      print(dic)
      
    • # 方式三:
      dic = dict({'one': 1, 'two': 2, 'three': 3})
      print(dic)
      
  • 验证列表的合法性

    • # 验证字典的合法性:
      dic = {[1, 2, 3]: 'alex', 1: 666}  # 列表不能当键
      print(dic)
      
      # 键要唯一
      dic = {1: 'alex', 1: '太白', 2: 'wusir'}
      print(dic)  # 不会报错,会覆盖
      

    2.字典的增删改查

  • 增:

    • 直接增加:有则改之,无则增加

      • dic = {'name': '太白', 'age': 18}
        # 直接增加  有则改之,无则增加
        dic['sex'] = '男'
        print(dic)
        dic['age'] = 23  # 会覆盖之前的age  # 改
        print(dic)
        
    • setdefault:有则不变,无则增加

      • dic = {'name': '太白', 'age': 18}
        # setdefault  有则不变,无则增加
        dic.setdefault('pig')
        print(dic)
        dic.setdefault('hobby', '球类运动')
        print(dic)
        dic.setdefault('age', 45)
        print(dic)  #age值不变
        
      • pop:按照键去删除键值对

        • dic = {'name': '太白', 'age': 18}
          # pop  按照键去删除键值对
          # 设置第二个参数,无论字典中有无此键都不会报错,并且返回此值
          ret = dic.pop('age')
          print(ret)
          print(dic)
          ret = dic.pop('hobby', '没有此键')
          print(ret)
          
      • clear

        • dic = {'name': '太白', 'age': 18}
          # clear  清空
          dic.clear()
          print(dic)
          
      • del

        • dic = {'name': '太白', 'age': 18}
          del dic['age']
          print(dic)
          
      • 键值对改

        • dic = {'name': '太白', 'age': 18}
          # 改
          dic['name'] = 'alex'
          print(dic)
          
      • 直接查(不可取,如没有此键会报错)

        • dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']}
          print(dic['hobby_list'])  # 不可取,如果没有会报错
          
      • get() 可以设置返回值

        • dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']}
          l1 = dic.get('hobby_list')
          l2 = dic.get('hobby_list1', '没有此键')  # 可以设置返回值
          print(l1)
          print(l2)
          
      • 三个特殊的:keys() values() items()

        • keys()

          • dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']}
            # keys
            print(dic.keys())
            # 可以转化成列表
            print(list(dic.keys()))
            for key in dic.keys():
                print(key)
            for key in dic:  # 也是获得键,和上着一样
                print(key)
            
        • values()

          • # values
            print(dic.values())
            print(list(dic.values()))
            for value in dic.values():
                print(value)
            
        • items() 可以进行拆包

          • dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']}
            # items  # 会返回元组类型
            print(dic.items())
            print(list(dic.items()))
            for keys, values in dic.items():  # 进行拆包
                print(keys, values)
            
            # 练习  a = 18, b = 12,用一行将其互换
            a = 18
            b = 12
            a, b = b, a
            print(a, b)
            
    • 练习

      • dic =

      • dic = {'k1': 'v1', 'k2': 'v2', 'k3': [11, 22, 33]}
        
        • 请在字典中添加一个键值对,'k4': 'v4',输出添加后的字典

        • dic.setdefault('k4', 'v4')
          print(dic)
          
        • 请修改字典中'k1'对应的值为'alex',输出修改后的字典

        • dic['k1'] = 'alex'
          print(dic)
          
        • 请在k3对应的值后追加一个元素44,输出修改后的字典

        • dic['k3'].append(44)
          print(dic)
          # 或者
          l1 = dic.get('k3')
          l1.append(44)
          print(dic)
          
        • 请在k3对应的值的第一个位置插入元素18,输出修改后的字典

        • dic['k3'].insert(0, 18)
          print(dic)
          

3.字典的嵌套

  • 练习一

  • dic = {
        'name': '汪峰',
        'age': 48,
        'wife': [{'name': '国际章', 'age': 38}],
        'children': {'girl_first': '小苹果', 'girl_second': '小怡', 'girl_three': '顶顶'}
    }
    
    • 1.获取汪峰的名字

      • print(dic['name'])
        # 或者
        print(dic.get('name'))
        
    • 2.获取这个字典:

      • l1 = dic.get('wife')
        print(l1)
        
    • 3.获取汪峰妻子的名字

      • l2 = l1[0].get('name')
        print(l2)
        
    • 4.获取汪峰的第三个孩子名字

      •  print(dic['children']['girl_three'])
        
  • 练习2

    • 1.将name对应的列表追加一个元素'wusir'

      • dic1.get('name').append('wusir')
        print(dic1)
        
    • 2.将name对应的列表中的alex首字母大写

      • dic1.get('name')[0] = dic1.get('name')[0].title()
        print(dic1)
        
    • 3.oldboy对应的字典加一个键值对'老男孩', 'linux'

      • dic1['oldboy']['老男孩'] = 'linux'
        print(dic1)
        
    • 4.将oldboy对应的字典中的alex对应的列表中的python2删除

      • dic1['oldboy']['alex'].pop(1)
        print(dic1)
        

今日总结

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

posted on 2020-06-28 21:27  百星不如一越  阅读(108)  评论(0)    收藏  举报