• 数据类型-字典


    字典的初识

    • why列表可以存储大量的数据,数据之间的关联性不强 #['taibai',18,'nan','dazhuang',3,'nv'] #列表的查询速度比较慢
    • what:容器型数据类型:dict

    • how:

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

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

        • #02 不可变(可哈希)的数据类型:str,int(常用) tuple.bool

      • 字典:{}括起来,以键值对存储的数据类型

      • 键必须是不可变的数据类型,而且是唯一的

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

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

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

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

        • 字典的查询速度非常快,简单解释一下原因:字典的键值对会存在一个散列表(稀疏数组)这样的空间中,每一个单位称作一个表元,表元里面记录着key:value,如果你想要找到这个key对应的值,先要对这个key进行hash获取一串数字咱们简称为门牌号(非内存地址),然后通过门牌号,确定表元,对比查询的key与被锁定的key是否相同,如果相同,将值返回,如果不同,报错。(这里只是简单的说一下过程,其实还是比较复杂的。)

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

    • 字典的使用

      字典的创建方式

      #方式一:元组的拆包
      dic = dict((('one',1),('two',2),('three',3)))
      print(dic)  #{'three': 3, 'one': 1, 'two': 2}
      
      #方式二:
      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)
      #TypeError: unhashable type: 'list'

      字典的增删改查

      增

    1 dic = {'name':'taibai','age':18}
    2 # dic['sex'] = 'nan'
    3 # dic['age'] = 23 #直接增加,有则改之,无则新增
    4 # print(dic) #{'name': 'taibai', 'age': 23, 'sex': 'nan'}
    5 
    6 dic.setdefault('hobby',['basketball','xiaqi','zhinan']) #有则不变,无则新增
    7 # dic.setdefault('age',23) #{'name': 'taibai', 'hobby': 'basketball', 'age': 18}
    8 # print(dic) #{'sex': 'nan', 'name': 'taibai', 'hobby': 'basketball', 'age': 23}

      删 pop clear del

     1 #pop 按照键删除键值对
     2 # ret = dic.pop('age')
     3 # print(ret) #18
     4 # #若删除键不存在,则返回提示
     5 # ret = dic.pop('sex','没有此键')
     6 # print(ret) #没有此键
     7 
     8 # clear
     9 # dic.clear()
    10 # print(dic) #{}
    11 
    12 
    13 #del
    14 del dic['age']
    15 print(dic) #{'name': 'taibai', 'hobby': 'basketball'}

      改

    1 dic['name'] = 'alex'
    2 print(dic) #{'name': 'alex', 'hobby': 'basketball'}

      查

    print(dic['hobby']) #不建议用此方法
    ret = dic.get('hobby')
    print(ret)
    ret2 = dic.get('hobby1','查无此人')
    print(ret2)
    
    #keys(),values()
    
    print(dic.keys(),dic.values(),list(dic.keys()))
    
    for key in dic:
    print(dic[key])
    
    for key in dic.keys():
    print(dic[key])
    
    for value in dic.values():
    print(value)
    
    #items
    for i in dic.items():
    print(i,type(i)) #('hobby', ['basketball', 'xiaqi', 'zhinan']) <class 'tuple'>
    
    for a,b in dic.items():
    print(a,b,type(a)) #name alex <class 'str'> hobby ['basketball', 'xiaqi', 'zhinan'] <class 'str'>

    字典的嵌套

     1 #字典嵌套列表
     2 #练习一
     3 dic = {
     4     'name':'wangfeng',
     5     'age':48,
     6     'wife':[{'name':'zhangziyi','age':38}],
     7     'children':{'girl_first':'xiaoping','girl_second':'xiaoyi','girl_three':'xingxing'}
     8 }
     9 
    10 #1.输出wangfeng
    11 print(dic.get('name'))
    12 #2.输出wife键对应的值
    13 print(dic.get('wife'))
    14 #3.输出zhagnziyi
    15 print(dic.get('wife')[0].get('name'))
    16 #4.输出第三个女儿的名字
    17 print(dic.get('children').get('girl_three'))
    18 
    19 #练习二
    20 dic1 ={
    21     'name':['alex',2,3,5],
    22     'job':'teacher',
    23     'class':{'alex':['python','python2',100]}
    24 }
    25 
    26 dic1['name'].append('wusir')
    27 print(dic1) #{'job': 'teacher', 'name': ['alex', 2, 3, 5, 'wusir'], 'class': {'alex': ['python', 'python2', 100]}}
    28 dic1['name'][0] = dic1['name'][0].capitalize()
    29 print(dic1)
    30 dic1['class']['lnh'] = 'linux'
    31 print(dic1)
    32 dic1['class']['alex'].pop(1)
    33 print(dic1)

    #练习三
    将字符串 'k:1|K1:2|k2:3|K3:4' 转换为字典 {'K1': 2, 'K3': 4, 'k': 1, 'k2': 3}
    msg = 'k:1|K1:2|k2:3|K3:4'

    dic = {}
    msg_list = msg.strip().split('|')
    for i in msg_list:
    key,value = i.split(':')
    dic[key] = int(value)

    print(dic) # {'K1': 2, 'K3': 4, 'k': 1, 'k2': 3}

     

  • 相关阅读:
    mysql 8 nodejs连不上
    render与vue组件和注册
    0424 前端笔记
    0423
    任务
    使用async await 封装 axios
    [Java] Spring 3.0 01/02/03/04/05 -自设源代码
    [Java] Spring3.0 360百科介绍
    [Java] Spring3.0
    [Java] Spring3.0 面向抽象(接口)编程
  • 原文地址:https://www.cnblogs.com/zyiy/p/12500737.html
Copyright © 2020-2023  润新知