1. 什么是字典
dict. 以{}表示. 每一项用逗号隔开, 内部元素用key:value的形式来保存数据
{"jj":"林俊杰", "jay":"周杰伦"}
查询的效率非常高, 通过key来查找元素
内部使用key来计算一个内存地址(暂时),hash算法. key必须是不可变的数据类型(key 必须是可哈希的数据类型)
键值对数据 {key:value} 唯一性
键 都必须是可哈希的 不可变的数据类型就可以当做字典中的键
值 没有任何限制
2. 字典的增删改查
1. 字典的新增:
dic[key] = valuedic.setdefault(key,value) 如果键在字典中存在不进行任何操作,否则就添加 可以通过key查询,没有这个key返回None
# dic = {} # # 徐峥:人在囧途 # dic['徐峥'] = "人在囧途" # 直接用key往里面存数据即可 # dic['黄渤'] = "疯狂的石头" # dic["王宝强"] = "天下无贼" # dic["王宝强"] = "士兵突击" # 如果key已经存在。 那么会替换掉原来的value, 修改 # # dic.setdefault("黄秋生") # dic.setdefault("黄秋生", "无间道") # 如果存在了key, 不会执行新增 # # print(dic)
2. 删除
pop(key)
popitem()
clear()
del dict[key]
dic = {"黄日华": "天龙八部", "吕颂贤": "笑傲江湖", "苏有朋": "倚天屠龙记", "六小龄童": "西游记"} # dic.pop("吕颂贤") # 指定key删除 # dic.popitem() # 随机删除 # del dic["黄日华"] # 删除 # dic.clear() # 清空字典 print(dic)
3. 修改
dic[key] = 新值
update()
4. 查询
1. 用key直接查询 dict[key]
2. get(key, 如果key不存在返回的数据)
3. setdefault() 1. 执行新增流程. 2. 查询结果
5. 操作
keys 获取到所有的键存在一个高仿的列表中values 获取到所有的值存在一个高仿的列表中items 获取到所有的键值对已元祖的形式存在一个高仿的列表中
解构, 直接把元组或者列表中的数据拿出来.
a, b, c = (a1, b1, c1) 必须一一对应
dic = {"刘能": "王小利", "赵四": "刘晓光", "王木生": "范伟", "谢大脚": "于月仙", "李大国": "小鬼"} # dic['王木生'] = "刘伟" dic2 = {"刘能": "大阳哥", "赵四": "github", "王木生": "汪峰", "谢大脚": "冯提莫", "王大拿": "金老板"} dic.update(dic2) print(dic) # 查询 dic = {'刘能': '大阳哥', '赵四': 'github', '王木生': '汪峰', '谢大脚': '冯提莫', '李大国': '小鬼', '王大拿': '金老板'} # 1. 最直观。 直接用key print(dic['周杰伦']) # 当这个key不存在的时候会报错 # 2. get方法 print(dic.get("谢大脚", "周杰伦不在这里")) # 没有key. 返回None # 3. setdefault() 1. 新增(先看有没有key, 如果有就过, 如果没有,执行新增) 2.根据key把值返回 dic = {} dic["盖伦"] = "德玛西亚之力" value = dic.setdefault("菲奥娜", "无双剑姬") # 新增 value2 = dic.setdefault("盖伦", "刘伟") # 由于已经存在了key。 所以新增不执行。 直接查询结果 value3 = dic.setdefault("薇恩", "坑") print(value3) print(dic)
6. 遍历字典
for key in dict:
dict[key]
for k, v in dict.items():
k , v
dic = {"汪峰": "大陆音乐半壁江山", "周杰伦": "亚洲音乐天王", "罗志祥": "亚洲舞王"} # 对字典的遍历 # print(dic.keys()) # dict_keys(['汪峰', '周杰伦', '罗志祥']) 像列表但不是列表 # for key in dic.keys(): # print(key) # 拿到key # print(dic[key]) # 拿到value # print(dic.values()) # for value in dic.values(): # print(value) # 也可以遍历字典 # [('汪峰', '大陆音乐半壁江山'), ('周杰伦', '亚洲音乐天王'), ('罗志祥', '亚洲舞王')] # print(dic.items()) # 拿到的是key和value for k, v in dic.items(): # 当需要遍历字典. 在操作中涉及到key和value的时候. print(k) # 元组 print(v) # 字典本身是一个可迭代对象,可以直接进行for循环 for el in dic: # 直接拿到key print(el) print(dic[el]) # 前面的变量的个数和后面解包的个数一致 # a, b = (10, 20) # 解构, 解包 # print(a) # print(b)
7. 字典嵌套.
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)