zoukankan      html  css  js  c++  java
  • 字典

    字典

    字典初识

    • 为什么需要字典?
      • 列表可以存储大量数据,但是数据之间的关联性不强
      • 列表的查询速度比较慢
    • 什么是字典?
      • 容器型数据类型 dict
    • 字典的格式?
      • {key:value,key:value}
      • 字典的key必须是不可变的数据类型:int、str(bool、tuple几乎不用),在一个字典里是唯一的,如果有重复的键,后面键的值会覆盖前面的。
      • value可以是任意数据类型
    • 字典的特性
      • 字典3.5版本之前是无序的
      • 字典3.6版本按照建立时的顺序排列
      • 字典3.7版本以后都是有序的
      • 字典的查询速度非常快,存储关联性数据
      • 字典的缺点:以空间换时间
    • 数据类型的分类(可变与不可变)
      • 可变(不可哈希)的数据类型:list、dict、set
      • 不可变(可哈希)的数据类型:str 、bool、int、tuple
        • 为避免哈希冲突,使用了开放寻址法

    字典的操作

    • 字典的创建
    #方式一
    dic = dict((("a",1),("b",3)))
    print(dic)
    
    #方式二
    dic = dict(a=1,b=6,c=7)
    print(dic)
    
    #方式三
    dic = dict({"a":2,"b":7,"c":8})
    print(dic)
    
      • 直接进行增加
      dic = {"name":"tom","age":14}
      dic["sex"]="男"
      
      #注意:如果key在字典中是存在的,那么就会覆盖掉原有的键值对
      
      • setdefault
      dic = {"name":"tom","age":14}
      dic.setdefault("sex","男")
      print(dic)
      
      print(dic1.setdefault("name"))	#字典里有键会返回值
      print(dic1.setdefault("word"))	#字典里没有键会返回None
      
      #注意:如果key在字典中存在,那么并不会改变原有的键值对;如果没有会增加
      
      • pop :根据key进行删除
      dic = {"name":"tom","age":14}
      ret = dic.pop("name")
      print(ret)
      print(dic)
      
      #可以返回被删除的值
      
      dic = {"name":"tom","age":14}
      ret = dic.pop("sex","没有此键")
      print(ret)
      
      #如果删除的是没有存在的键值对,那么会报错,在pop括号里添加第二个参数可以不用报错,并且会输出添加的第二个参数
      
      • clear 清空
      dic = {"name":"tom","age":14}
      dic.clear()
      print(dic)
      
      #只会清空字典里的数据,不会删除字典
      
      • del
      dic = {"name":"tom","age":14}
      del dic["name"]
      print(dic)
      
      #如果删除不存在的键值对会报错
      
      • 直接对应key值进行更改
      • update
      dic = {"name":"tom","age":14}
      dic1 = {1:"2","age":2}
      dic1.update(dic)
      print(dic1)
      
      #update后面的字典会覆盖update前面的字典
      
      • for 循环得到的是字典的键
    • 按照键取值

      dic = {"name":"tom","age":14}
      print(dic["name"])
      
      dic = {"name":"tom","age":14,"a":["os",1,3]}
      print(dic["a"])
      
      #查询不存在的时候会报错
      
    • get(推荐)

      dic = {"name":"tom","age":14,"a":["os",1,3]}
      print(dic.get("a"))
      print(dic.get("sex"))
      print(dic.get("sex","没有键值对"))	#可以设置返回值,默认返回None
      
    • keys、value、item

      dic.keys()	#取出所有的key值,数据类型为高仿列表,可以进行for循环,也可转换成list
      dic.values() #取出所有的value值,同上
      dic.items() #取出键值对放在容器中
      
      for i in dic.items():
          print(i)
      #循环之后得到键值对的元组
      
      for key,value in dic.items():
          print(key,value)
      #可以利用元组的拆包解构,分别赋值
      #列表,元组,字典、字符串都可以进行解构,必须一一对应
      
      

    字典的嵌套

    相关习题01:

    dic = {
        'name':'汪峰',
        'age':48,
        'wife':[{'name':'国际章','age':38}],
        'children':['第一个熊孩子','第二个熊孩子']
    }
    
    #1.获取汪峰的妻子名字
    print(dic.get("wife")[0]["name"])
    
    #获取汪峰的孩子们
    print(dic.get("children"))
    
    #获取汪峰的第一个孩子
    print(dic.get("children")[0])
    

    相关习题02:

    dic1 = {
     'name':['',2,3,5],
     'job':'teacher',
     'oldboy':{'gods':['python1','python2',100]}
     }
    
    # 1,将name对应的列表追加⼀个元素’wusir’。
    dic1.get("name").append("wusir")
    
    # 2,将name对应的列表中的gods字⺟⼤写。
    dic1.get("name")[0] = dic1.get("name")[0].upper()
    
    # 3,oldboy对应的字典加⼀个键值对’⽼男孩’,’linux’
    dic1.get("oldboy")["老男孩"]="linux"
    
    # 4,将oldboy对应的字典中的gods对应的列表中的python2删除
    dic1.get("oldboy")["gods"].pop(1)
    
    
  • 相关阅读:
    FusionCharts--加载XML文件
    昌泡排序的结果从小到大
    调试javaee郑阿奇第二章出现的问题
    补充-servlet基础
    利用二维int型数组表达一个矩阵,创建该数组并将其元素打印输出
    创建字符串数组并将元素转换为小写输出
    在一个字符串中搜索虽一个字符串
    在数组中查找指定的值
    复制字符串
    补充 精通JSP开发应用 (Eclipse 平台) 第六章 基础技术:Servlet
  • 原文地址:https://www.cnblogs.com/os-linux/p/11165964.html
Copyright © 2011-2022 走看看