一. 字典的简单介绍
字典(dict)是python中唯⼀的⼀个映射类型,他是以 { } 括起来的键值对组成. 在dict中key是 唯⼀的. 在保存的时候, 根据key来计算出⼀个内存地址. 然后将key-value保存在这个地址中. 这种算法被称为hash算法, 所以, 切记, 在dict中存储的key-value中的key'必须是可hash的, 如果你搞不懂什么是可哈希, 暂时可以这样记, 可以改变的都是不可哈希的, 那么可哈希就意味着不可变. 这个是为了能准确的计算内存地址而规定的. 已知的可哈希(不可变)的数据类型: int, str, tuple, bool 不可哈希(可变)的数据类型: list, dict, set 语法 : {key1: value1, key2: value2....} 注意: key必须是不可变(可哈希)的. value没有要求.可以保存任意类型的数据
dic={"关羽":"将军","李云龙":"师长","和尚":"排长","刘备":"皇上"} print(dic) {'关羽': '将军', '李云龙': '师长', '和尚': '排长', '刘备': '皇上'}
合法的 dic = {1: "马化腾", False:"阿里巴巴", "sylar":"帅的不行不行的", (1, "哈哈"): "元组"} print(dic) 不合法: dic = {1: "马化腾", False:"阿里巴巴", "sylar":"帅的不行不行的", (1, "哈哈"): "元组", ["吼吼"]:"列表"} print(dic)
*不可以是列表
dict保存的数据不是按照我们添加进去的顺序保存的. 是按照hash表的顺序保存的. 而hash表不是连续的. 所以不能进⾏切片工作. 它只能通过key来获取dict中的数据
二. 字典的增删改查和其他相关操作
1. 增加
dic={"TT":"汤普森"} dic["jj"]="凌俊杰" print(dic) {'TT': '汤普森', 'jj': '凌俊杰'}
如果key重复了. 会替换掉原来的value dic={"TT":"汤普森"} dic["jj"]="凌俊杰" dic["jj"]="123" print(dic) {'TT': '汤普森', 'jj': '123'}
dic={"TT":"汤普森"} dic.setdefault("詹姆斯","湖人") print(dic) {'TT': '汤普森', '詹姆斯': '湖人'}
如果字典中已经包含了这个key. 不再继续保存 dic={"TT":"汤普森"} dic.setdefault("詹姆斯","湖人") dic.setdefault("詹姆斯","篮球运动员") print(dic) {'TT': '汤普森', '詹姆斯': '湖人'}
dic={"TT":"汤普森"} dic.setdefault("科比") print(dic) {'TT': '汤普森', '科比': None}
2. 删除
dic={"pig":"猪","dog":"狗","apple":"苹果"} dic.pop("pig") print(dic) {'dog': '狗', 'apple': '苹果'}
删除一个元素. 返回这个元素的value值 dic={"pig":"猪","dog":"狗","apple":"苹果"} e=dic.pop("pig") print(e) 猪
dic={"pig":"猪","dog":"狗","apple":"苹果"} del dic["dog"] print(dic) {'pig': '猪', 'apple': '苹果'}
随机删除 dic={"pig":"猪","dog":"狗","apple":"苹果"} dic.popitem() print(dic)
返回给你的是一个元组
e=dic.pop("pig")
print(e)
清除 dic={"pig":"猪","dog":"狗","apple":"苹果"} dic.clear() print(dic)
3. 修改
dic={"李云龙":"独立团","裤兜":500,"姚明":"篮球"} dic["裤兜"]=dic["裤兜"]-200 print(dic) {'李云龙': '独立团', '裤兜': 300, '姚明': '篮球'}
把dic2中的内容更新到 dic1 , 如果存在了key. 替换. 如果不存在,添加 dic1={"李云龙":"营长","和尚":"警卫员","诸葛亮":"丞相"} dic2={"关羽":"将军","李云龙":"师长","和尚":"排长","刘备":"皇上"} dic1.update(dic2) print(dic1) print(dic2) {'李云龙': '师长', '和尚': '排长', '诸葛亮': '丞相', '关羽': '将军', '刘备': '皇上'} {'关羽': '将军', '李云龙': '师长', '和尚': '排长', '刘备': '皇上'}
4. 查询
dic={"及时雨":"宋江","豹子头":"林冲","黑旋风":"李逵"} print(dic["及时雨"]) 宋江
dic={"及时雨":"宋江","豹子头":"林冲","黑旋风":"李逵"} print(dic["小李广"]) 报错
dic={"及时雨":"宋江","豹子头":"林冲","黑旋风":"李逵"} print(dic.get("及时雨")) 宋江
dic={"及时雨":"宋江","豹子头":"林冲","黑旋风":"李逵"} print(dic.get("小李广")) None
dic={"及时雨":"宋江","豹子头":"林冲","黑旋风":"李逵"} print(dic.get("小李广","花荣")) 花荣
dic={"及时雨":"宋江","豹子头":"林冲","黑旋风":"李逵"} ret=dic.setdefault("及时雨") print(ret) 宋江
dic={"及时雨":"宋江","豹子头":"林冲","黑旋风":"李逵"} ret=dic.setdefault("小李广") print(ret) None
dic={"及时雨":"宋江","豹子头":"林冲","黑旋风":"李逵"} ret=dic.setdefault("小李广","花荣") print(ret) 花荣
# 1. 首先判断原来的字典中有没有这个key . 如果没有. 执行新增
# 2. 用这个key去字典中查询, 返回查到的结果
5. 其他相关操作
dic={"及时雨":"宋江","豹子头":"林冲","黑旋风":"李逵"} print(dic.keys()) dict_keys(['及时雨', '豹子头', '黑旋风']) 拿到所有的key, 返回key的集合. 像是列表. 但是不是列表 print(dic.values()) dict_values(['宋江', '林冲', '李逵'])
可以进行迭代循环 dic={"及时雨":"宋江","豹子头":"林冲","黑旋风":"李逵"} for key in dic.keys(): print(key) 及时雨 豹子头 黑旋风 for values in dic.values(): print(values) 宋江 林冲 李逵
拿到键值对 dic={"及时雨":"宋江","豹子头":"林冲","黑旋风":"李逵"} print(dic.items()) dict_items([('及时雨', '宋江'), ('豹子头', '林冲'), ('黑旋风', '李逵')])
遍历dict dic={"及时雨":"宋江","豹子头":"林冲","黑旋风":"李逵"} for item in dic.items(): print(item) ('及时雨', '宋江') ('豹子头', '林冲') ('黑旋风', '李逵') for k , v in dic.items(): # = item # (key, value) print(k,v) 及时雨 宋江 豹子头 林冲 黑旋风 李逵
解构 . 解包 a, b = (1, 2) print(a) print(b) 1 2 a, b, c = ("马化腾", "马云", "马良") print(b) 马云
镶嵌 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
字典的for 循环 dic = {1: 'a', 2:'b', 3:'c'} for a in dic: print(a) 1 2 3 print(dic[a]) a b c 直接循环字典.拿到的是key