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