1. 字典(dict)的简单介绍
字典(dict)是python中唯⼀的⼀个映射类型.他是以{ }括起来的键值对组成. 在dict中key是唯⼀的. 语法 : {key1: value1, key2: value2....} # 用大括号{}括起来. 内部使用key:value的形式来保存数据 {'jay':'周杰伦','jj':'林俊杰'} 注意: key必须是不可变(可哈希)的. value没有要求.可以保存任意类型的数据 已知的可哈希(不可变)的数据类型: int, str, tuple, bool 不可哈希(可变)的数据类型: list, dict, set
2. 字典(dict)的增删改查
*增加 dic = {'昆凌':"周杰伦的老婆"} # 新增 dic["国际章"] = "汪峰的老婆" print(dic) # {'昆凌': '周杰伦的老婆', '国际章': '汪峰的老婆'} # 若果key重复了, 会替换掉原来的数据 dic["国际章"] = "雄壮的老外" print(dic) # {'昆凌': '周杰伦的老婆', '国际章': '雄壮的老外'} # 新增 dic.setdefault("马蓉","王宝强的前任老婆") print(dic) # {'昆凌': '周杰伦的老婆', '马蓉': '王宝强的前任老婆'} # 如果字典中已经包含了这个key,不在继续保存. dic.setdefault("马蓉","宋哲的现任老婆????") print(dic) # {'昆凌': '周杰伦的老婆', '马蓉': '王宝强的前任老婆'} #只有key,没有value. 那么value是空值none dic.setdefault("谢娜",) print(dic) # {'昆凌': '周杰伦的老婆', '马蓉': '王宝强的前任老婆', '谢娜': None}
* 删除 dic = {"牌牌":"你去哪里了","晓雪":"你快回来","雪雪":"又走了","老李":"你怎么来了?"} # 删除 ret = dic.pop("晓雪") # 返回被删除这个元素的value值 print(dic) # {"牌牌":"你去哪里了","雪雪":"又走了","老李":"你怎么来了?"} print(ret) # 你快回来 # 随机删 ret = dic.popitem() # 返回被随机删除这个元素的value值 print(dic) print(ret) # del删除 del dic["雪雪"] print(dic) # {'牌牌': '你去哪里了', '晓雪': '你快回来', '老李': '你怎么来了?'} # 清空字典所有内容 dic.clear() print(dic) # {}
*修改 dic = {"id":1,"name":"李嘉诚",'money':1000000} # 李嘉诚赔 了500 dic["money"] = dic["money"] - 500 print(dic) # {'id': 1, 'name': '李嘉诚', 'money': 999500}
dic1 = {'李晨':'范冰冰',"邓超":"孙俪","王祖蓝":"李亚男"} dic2 = {'李晨':'张曦予',"郑凯":"baby","王宝强":"马蓉"} dic1.update(dic2) # 把dic2中的内容更新到dic1中. 如果存在了key,替换. 如果不存在,添加. print(dic1) # {'李晨': '张曦予', '邓超': '孙俪', '王祖蓝': '李亚男', '郑凯': 'baby', '王宝强': '马蓉'} print(dic2) # {'李晨': '张曦予', '郑凯': 'baby', '王宝强': '马蓉'}
*查询 dic = {"及时雨":"宋江","小李广":"花荣","黑旋风":"李逵","易大师":"剑圣"} dic["大宝剑"] = "盖伦" # 新增(dic里面没有) dic["及时雨"] = "天老爷" # 修改(覆盖) # 查询. 如果key存在,得到他的value值. 如果key不在,报错 print(dic["及时雨"]) # 天老爷 print(dic["易大师是个脑残"]) # KeyError: '易大师是个脑残' # get() # 可以通过key来获取value的值. 那么如果key不存在. 返回None # 野人可以在后面给出一个默认值. 当key不存在是返回默认值 dic = {"及时雨":"宋江","小李广":"花荣","黑旋风":"李逵","易大师":"剑圣"} print(dic.get("易大师","余小c")) # 剑圣
print(dic.get("无用")) # None
print(dic.get("无用","不存在")) # 不存在
dic = {"及时雨":"宋江","易大师":"剑圣"} dic.setdefault("诺手","诺克萨斯") # 可以帮我们添加(如果dic中有了,不再覆盖添加) print(dic) # {'及时雨': '宋江', '易大师': '剑圣', '诺手': '诺克萨斯'} ret = dic.setdefault("及时雨123","hello") print(ret) # hello print(dic) # {'及时雨': '宋江', '易大师': '剑圣', '诺手': '诺克萨斯', '及时雨123': 'hello'} # 1. 首先判断原来的字典有没有这个key. 如果没有,执行新增. # 2. 用这个key去字典中查询, 返回查询到的结果 dic = {"及时雨":"宋江","易大师":"剑圣"} ret = dic.setdefault("潘金莲","西门庆") # 如果没有,就新增. 再通过key去查询value. print(ret) # 西门庆 ret = dic.setdefault("及时雨","西门庆") # 如果有,就不用新增. 直接通过key去查询. print(dic) # {'及时雨': '宋江', '易大师': '剑圣', '潘金莲': '西门庆'} print(ret) # 宋江
3. 字典的其他相关操作
dic = {"及时雨":"宋江","易大师":"剑圣","维恩":"暗影猎手"} # 拿到所有的key. 返回key的集合. 像是列表, 但不是列表 print(dic.keys()) # dict_keys(['及时雨', '易大师', '维恩']) for key in dic.keys(): # 可以进行迭代循环 print(key) # 拿到所有的value. 返回key的集合. 像是列表, 但不是列表 print(dic.values()) # dict_values(['宋江', '剑圣', '暗影猎手']) for value in dic.values(): print(value) # 拿到所有的赋值对 print(dic.items()) # dict_items([('及时雨', '宋江'), ('易大师', '剑圣'), ('维恩', '暗影猎手')]) # 遍历dict for k, v in dic.items(): # 下面的两步利用解构最终推出这个 print(k, v) for item in dic.items(): print(item[0]) # key print(item[1]) # value for item in dic.items(): k, v = item # (key, value) print(k) print(v) # 解构. 解包(元组, 列表都可以用) a, b = (1, 2) print(a) # 1 print(b) # 2 a, b, c, = ("马化腾","马云","马良") print(a) # 马化腾 print(b) # 马云 print(c) # 马良 a, b = [1,2] print(a,b) # 1 2 k, v = "st" print(k, v) # s t # len()测量字典的长度 s = {"ni":"你","wo":"我","ta":"他"} print(len(s)) # 3
# 直接循环字典,拿到的是key dic = {1:'a',2:'b',3:'c'} for a in dic: print(a) print(dic[a])
4. 字典的嵌套
dic = { "name":"汪峰", "age":58, "wife":{ "name":"国际章", "salary": 180000, "age": 37 }, "children":[ {"name":"老大","age": 18}, {"name":"老二","age": 118} ] } print(dic["children"][1]["age"]) # 118 print(dic["wife"]["salary"]) # 180000