一 字典
定义:dict, 以{},表示.每一项用逗号隔开,内部元素用key:value的形式来保存数据.例如
{"jj":"林俊杰","jay':周杰伦"}
特点:查询效率非常高,通过key来查找元素
内部使用key来计算一个内存地址(暂时),hash算法,key必须不可变的数据类型(key必须是可hash的数据类型)可hash就是不可变
已知的可hash数据:int str tuple bool
不可hash的类型:list dist set
语法 dict={key1:value1,key2;value2....}
注意;key必须是不可hash的(不可变的),value没有要求(可以保存任意的数据)
dict保存的数据不是按照我们添加进去的顺序保存的. 是按照hash表的顺序保存的. ⽽而hash表
不是连续的. 所以不能进⾏行行切片⼯工作. 它只能通过key来获取dict中的数据
二 新增
dic={} dic["徐峥"]="人在囧途" #如果dict中没没有key,就会新增一个key:value的组合进去 dic["黄渤"]="疯狂的石头" dic["王宝强"]="天下无贼" dic["王宝强"]="士兵突击" #如果key已经存在.那么会替换掉原来的value dic.setdefault("黄丘生") dic.setdefault("黄丘生","无间道")# 如果key存在了 不会执行新增 print(dic)
三 删除
dic = {"黄日华": "天龙八部", "吕颂贤": "笑傲江湖", "苏有朋": "倚天屠记"} # #dic.pop("吕颂贤") #指定删除 # dic.popitem()#随即删除 # dic.clear() # 清空字典 # print(dic)
四 修改
dic = {"刘能": "王小利", "赵四": "刘晓光", "王木生": "范伟", "谢大脚": "于月仙", "李大国": "小鬼"} dic['王木生'] = "刘伟" # print(dic) 替换 dic2 = {"刘能": "大阳哥", "赵四": "github", "王木生": "汪峰", "谢大脚": "冯提莫", "王大拿": "金老板"} dic.update(dic2) #相同的换掉,不一样的加上去 print(dic)
五 查询
dic={"刘能":"大阳哥","赵四":"github","王木生":"汪峰"} # #1.最直观,直接用key # print(dic["刘能"])#当这个key不存在时会报错 # # # 2.get # print(dic.get("谢大脚",))##没有key返回none # # #3. # #setdefault(先新增 看看有没有key,如果有就过,没有执行新增 @根据key把值返回 dic={} dic["盖伦"]="德玛西亚之力" value = dic.setdefault("feiaona", "无双剑姬") # 新增 value2 = dic.setdefault("盖伦", "刘伟") # 由于已经存在了key。 所以新增不执行。 直接查询结果 value3 = dic.setdefault("薇恩", "坑") print(dic)
相关操作
主要是遍历字典
=相关操作 dic = {"汪峰": "大陆音乐半壁江山", "周杰伦": "亚洲音乐天王", "罗志祥": "亚洲舞王"} #print(dic.values()) #得到 dict_keys(['汪峰', '周杰伦', '罗志祥']) 像列表但不是列表 可以当列表来看(来用)#通过这种方法对字典的遍历一个个都拿出来 #第一种方法: # for key in dic.keys(): # print(key) # 得到 key # print(dic[key]) #得到value daic[key]表示value#上边是对key的遍历 #对value的遍历# print(dic.values()) # for value in dic.values(): # print(value)# 只能拿出value不能拿出key 也就这样了#既然拿到key,拿到value #能不能一对一对拿#亦可以遍历字典 # print(dic.items()) #items每一项 ; 拿到value和拿出key # for item in dic.items(): # print(item) #拿到元组类型的 # print(item[0],item[1]) #拿到key和value # # a,b=10,20 #结构\解包 元组列表都有 # print(a) # print(b)#这个也可以遍历字典 # # print(dic.items()) # 拿到的是key和value for k, v in dic.items(): # 当需要遍历字典. 在操作中涉及到key和value的时候.print(k) # 元组print(v)# 字典本身是一个可迭代对象,可以直接进行for循环 for el in dic: # 直接拿到keyprint(el)print(dic[el])
六 字典的嵌套
给个例子
wf = {"name": "汪峰","age": 48,"成名曲": "春天里","wife": {"name": "章子怡","age": 39,"工作": "演员"},"children":[{"num": "001", "name": "汪一", "hobby": "唱歌"},{"num": "002", "name": "汪二", "hobby": "演戏"} # wf['children'][1]['name']] }# wf['wife']['age'] = wf['wife']['age'] + 10 # print(wf)