字典

字典

字典初识

  • 为什么需要字典?
    • 列表可以存储大量数据,但是数据之间的关联性不强
    • 列表的查询速度比较慢
  • 什么是字典?
    • 容器型数据类型 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)

原文地址:https://www.cnblogs.com/os-linux/p/11165964.html