当前位置: 移动技术网 > IT编程>脚本编程>Python > Python基础数据类型:字典dict

Python基础数据类型:字典dict

2019年05月06日  | 移动技术网IT编程  | 我要评论

慈元阁旗舰店,佛山电视台节目表,苍空之雾修改器

python基础数据类型:字典dict

01 内容大纲

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

02 具体内容

  • 字典的初识:

    • why:

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

    • how:

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

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

        • 不可变(可哈希)的数据类型: str bool int tuple

          • 不可变是指该对象本身是不可变的,在内存中自始至终未变化。

            • 比如,对字符串的任何操作,对原对象没有任何改变。

              s = 'alex'
              s2 = s.upper()
              print(s,s2)#alex alex
              
              s = 'alex'
              s = s.upper()
              print(s)#alex   变化的只是变量的指向
            • i = 100
              i = 101
              i = 102   #100,101,102都会在内存中占一定空间,变化的只是变量的指向。
      • 字典:{}括起来,以键值对形式存储的容器型数据类型:

        • dic = {'太白':
               {'name': '太白金星','age': 18, 'sex': '男'},
           'python22期': 
               ['朱光亚', '大壮', '雪飞', '岑哥'],
           }
      • 键必须是不可变的数据类型:int , str (bool tuple几乎不用) 键要是唯一的

      • 只能通过房间号(键)找到房间(值),房间内存什么数据都行

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

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

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

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

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

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

    • 字典的创建方式:

      • 面试会考:创建字典的三种方式
        #dict查看源码  ctrl+左键 点击dict
        # 方式一:
         dic = dict((('one', 1), ('two', 2), ('three', 3)))  #创建字典用dic = dic()  括号内包含一个大元组,用括号括起来,
                                                             #大元组内部包含三个小元组,分别用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)
        
        # 方式三:
         dic = dict({'one': 1, 'two': 2, 'three': 3})    #官方正规写法dic = dic()  括号内放了一个字典
         print(dic)
        
         dic = {'one': 1, 'two': 2, 'three': 3}  #平时上课的写法
        
        # 方式四:
         dic = dict(zip(['one', 'two', 'three'],[1, 2, 3]))
         print(dic)#{'one': 1, 'two': 2, 'three': 3}
        
        # 方式五: 字典推导式 后面会讲到
         dic = { k: v for k,v in [('one', 1),('two', 2),('three', 3)]}
         print(dic)#{'one': 1, 'two': 2, 'three': 3}
        
        # 方式六:利用fromkey
         dic = dict.fromkeys('abcd','太白')
         print(dic)#{'a': '太白', 'b': '太白', 'c': '太白', 'd': '太白'}
    • 验证字典的合法性:

      # 不合法
      dic = {[1,2,3]: 'alex', 1: 666}  # 键要不可变的数据类型
      print(dic)    #typeerror: unhashable type: 'list'
      dic = {[1, 2, 3]: '周杰伦'} # list是可变的. 不能作为key。typeerror: unhashable type: 'list'
      dic = {{1: 2}: "哈哈哈"} # dict是可变的. 不能作为key。typeerror: unhashable type: 'dict'
      dic = {{1, 2, 3}: '呵呵呵'} # set是可变的, 不能作为key。typeerror: unhashable type: 'set'
      
      dic = {1: 'alex', 1: '太白', 2: 'wusir'}  # 键要唯一
      print(dic)  #{1: '太白', 2: 'wusir'}
    • 字典的增删改查【掌握】

      dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']}
      # 增:
      # 直接增加 有则改之,无则增加
       dic['sex'] = '男'  #没有sex这个键,就增加键值对
       print(dic)#{'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车'], 'sex': '男'}
      
       dic['age'] = 23  # 改 :有age这个键,就成了字典的改值
       print(dic)#{'name': '太白', 'age': 23, 'hobby_list': ['直男', '钢管', '开车']}
      
      # setdefault  有则不变,无则增加
      dic.setdefault('hobby')
      print(dic)#{'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车'], 'hobby': none}     #none空
      
      dic.setdefault('hobby', '球类运动')#无则增加:没有此键则添加
      print(dic)#{'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车'], 'hobby': '球类运动'}
      
      dic.setdefault('age', 45)#有则不变:有此键则不变
      print(dic)#{'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']}
      
      
      # 删
      # pop 按照键删除键值对, 有返回值,可以设置返回值;设置第二个参数则无论字典中有无此键都不会报错   ***【重点记】
       dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']}
       dic.pop('age')
       print(dic)#{'name': '太白', 'hobby_list': ['直男', '钢管', '开车']}
       ret = dic.pop('age')
       print(ret)  #18  返回删除键对应的值
      
       dic.pop('hobby') #报错 keyerror: 'hobby'
      
       #设置第二个参数则无论字典中有无此键都不会报错 ;pop返回值可以设置   
       ret = dic.pop('hobby','没有此键')  
       print(ret)#没有此键  
       ret = dic.pop('hobby','哈哈')
       print(ret)#哈哈  (返回值)
      
      
      # popitem 3.5版本之前,popitem为随机删除,3.6之后为删除最后一个,有返回值
       dic = {'name': '太白', 'age': 18}
       ret = dic.popitem()
       print(ret, dic) #('age', 18) {'name': '太白'}
      
      
      # clear  清空字典  **
       dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']}
       dic.clear()  #把字典内容清空,不是把字典删除
       print(dic)
      
      # del  通过键删除键值对 **
      dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']}
      del dic['age']
      print(dic)#{'name': '太白', 'hobby_list': ['直男', '钢管', '开车']}
      #没有此键会报错
      del dic['age1']#keyerror: 'age1' 报错
      print(dic)
      
      # del dic 删除整个字典
      dic = {'name': '太白', 'age': 18}
      del dic
      print(dic)# name 'dic' is not defined   因为字典被删除了
      
      
      # 改:通过键值对直接改
      dic['name'] = 'alex'
      print(dic)
      
      # update
       dic = {'name': '太白', 'age': 18}
       dic.update(sex='男',heigth=175)
       print(dic)#{'name': '太白', 'age': 18, 'sex': '男', 'heigth': 175}
      
       dic = {'name': '太白', 'age': 18}
       dic.update([(1, 'a'),(2, 'b'),(3, 'c'),(4, 'd')])
       print(dic) # {'name': '太白', 'age': 18, 1: 'a', 2: 'b', 3: 'c', 4: 'd'}
      
       dic1 = {"name":"jin","age":18,"sex":"male"}
       dic2 = {"name":"alex","weight":75}
       dic2.update(dic1)
       print(dic2)#{'name': 'jin', 'weight': 75, 'age': 18, 'sex': 'male'}
       dic1.update(dic2)
       print(dic1) # {'name': 'alex', 'age': 18, 'sex': 'male', 'weight': 75}
      
      
      # 查
      #按键查值,缺点:没有键会报错,不建议用
      #通过键查询,直接dic[key](没有此键会报错)
      dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']}
      print(dic['hobby_list'])  #['直男', '钢管', '开车']
      print(dic['hobby_list1']) #报错  keyerror: 'hobby_list1'
      
      # get  ***【重点记】
      #没有键返回none,不会报错。可以设置返回值
      
       dic = {'name': '太白', 'age': 18, 'hobby_list': ['直男', '钢管', '开车']}
       l1 = dic.get('hobby_list')
       print(l1)  #['直男', '钢管', '开车']
      
       l1 = dic.get('hobby_list','没有此键')  # 可以设置返回值: '没有此键'(返回值)
       print(l1)#['直男', '钢管', '开车']
      
       l1 = dic.get('hobby_list1')  
       print(l1)  #none    没有键返回none,不会报错
      
       l1 = dic.get('hobby_list1','没有此键')  # 可以设置返回值
       print(l1)  #没有此键(返回值)
      
      
      # 三个特殊的
      keys() values() items()
      # keys()
      # 一个高仿列表,存放的都是字典中的key
      print(dic.keys(),type(dic.keys()))   #dict_keys(['name', 'age', 'hobby_list']) <class 'dict_keys'>
      # 可以转化成列表
      print(list(dic.keys())) #['name', 'age', 'hobby_list']
      
      #循环遍历,打印键:
      #1
      for key in dic.keys():
          print(key)
      #2
      for key in dic:
          print(key)
      #结果:
      name
      age
      hobby_list
      
      
       # values()
       dic = {'name':'taibai', 'age': 18, 'hobby_list': ['直男','钢管','开车']}
       #一个高仿列表,存放都是字典中的value
       print(dic.values())#dict_values(['taibai', 18, ['直男', '钢管', '开车']])
       # 可以转化成列表
       print(list(dic.values()))#['taibai', 18, ['直男', '钢管', '开车']]
       #循环遍历,打印值:
       for value in dic.values():
           print(value)
      #结果:
       taibai
       18
       ['直男', '钢管', '开车']
      
      # items()
      dic = {'name':'taibai', 'age': 18, 'hobby_list': ['直男','钢管','开车']}
      # 一个高仿列表,存放是多个元祖,元祖中第一个是字典中的键,第二个是字典中的值  
      print(dic.items())#dict_items([('name', 'taibai'), ('age', 18), ('hobby_list', ['直男', '钢管', '开车'])])
      # 可以转化成列表
      print(list(dic.items())) #[('name', 'taibai'), ('age', 18), ('hobby_list', ['直男', '钢管', '开车'])]
      #循环遍历,打印所有键值对
      for key,value in dic.items():
          print(key,value)
      
      结果:
      name
      taibai
      age
      18
      hobby_list['直男', '钢管', '开车']
      
      #元组拆包,分别赋值
       a,b = ('name', '太白')
       print(a,b)
      
      #面试题:用一行代码将a和b的值互换
      a = 18
      b = 12
      a,b = b,a
      print(a,b)#12 18
      
      a,b= 12,18
      print(a,b)
    • 字典的嵌套【掌握】

      dic = {
          'name': '汪峰',
          'age': 48,
          'wife': [{'name': '国际章', 'age': 38},],
          'children': {'girl_first': '小苹果','girl_second': '小怡','girl_three': '顶顶'}
      }
      
      # # 1. 获取汪峰的名字。
       print(dic['name'])
       print(dic.get('name'))
      # # 2.获取这个字典:{'name':'国际章','age':38}。
       print(dic['wife'][0])   #{'name': '国际章', 'age': 38}
       print(dic.get('wife')[0])#{'name': '国际章', 'age': 38}
      # # 3. 获取汪峰妻子的名字。
       print(dic.get('wife')[0].get('name'))#国际章
       print(dic.get('wife')[0]['name'])#国际章
       print(dic['wife'][0]['name'])#国际章
      # # 4. 获取汪峰的第三个孩子名字。
       print(dic.get('children').get('girl_three'))#顶顶
       print(dic.get('children')['girl_three'])#顶顶
       print(dic['children']['girl_three'])#顶顶

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网