Day-05 基础数据类型字典dict
一、认识字典
字典是成对的保存数据,以key:value的形式保存,用{}表示,每一项内容都是key:value,每项数据之间用逗号隔开
字典中的key是不能重复的。存储是依靠着key来计算的。
切记:在字典中存储的key-value中的key必须是可hash的,如果你搞不懂什么是哈希,暂时可以这样记,可以改变的都是不可哈希的,那么可哈希就意味着不可变,这个是为了能准确的计算内存地址而规定的。
已知的可哈希(不可变)的数据类型:str、int、tuple、bool
不可哈希(可变)的数据类型:list、dict、set
二、字典的增删改查
1、增加
dic[key] = value
setdefault(key, value)
dic = {} dic['name'] = '周润发' # 如果dict中没有出现这个key, 就会新增⼀个key-value的组合进dict dic['age'] = 18 print(dic)
结果:
{'name': '周润发', 'age': 18}
# 如果dict中没有出现过这个key-value. 可以通过setdefault设置默认值 dic.setdefault('李嘉诚') # 也可以往⾥⾯设置值. dic.setdefault("李嘉诚", "房地产") # 如果dict中已经存在了. 那么setdefault将不会起作⽤,这个要记得 print(dic)
结果:
{'name': '周润发', 'age': 18, '李嘉诚': None} 字典增加操作
2、删除
dic = {"黄日华": "天龙八部", "吕颂贤": "笑傲江湖", "苏有朋": "倚天屠龙记", "六小龄童": "西游记"} # dic.pop("吕颂贤") # 指定key删除 # dic.popitem() # 随机删除 # del dic["黄日华"] # 删除 # dic.clear() # 清空字典 print(dic)
3、修改
dic[key] = value
dic1.update(dict2)
dic = {"刘能": "王小利", "赵四": "刘晓光", "王木生": "范伟", "谢大脚": "于月仙", "李大国": "小鬼"} dic['王木生'] = "刘伟"
结果:
{'刘能': '王小利', '赵四': '刘晓光', '王木生': '刘伟', '谢大脚': '于月仙', '李大国': '小鬼'}
dic2 = {"刘能": "大阳哥", "赵四": "github", "王木生": "汪峰", "谢大脚": "冯提莫", "王大拿": "金老板"} dic.update(dic2) print(dic)
把dict2 更新到dic
结果:
{'刘能': '大阳哥', '赵四': 'github', '王木生': '汪峰', '谢大脚': '冯提莫', '李大国': '小鬼', '王大拿': '金老板'}
1 dic = {"id": 123, "name": 'sylar', "age": 18} 2 dic1 = {"id": 456, "name": "麻花藤", "ok": "wtf"} 3 dic.update(dic1) # 把dic1中的内容更新到dic中. 如果key重名. 则修改替换. 如果不存在key, 则新增. 4 print(dic) 5 print(dic1)
4、查询
dic[key] 可能会报错
dic.get(key)
dic.setdefault()
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)
重要******
三、常见操作
keys() key的集合
values() value的集合
items() 键值对的集合(key,value)
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)
四、字符串嵌套
# 字典的嵌套 dic1 = { "name": "汪峰", "age": 18, "wife": { "name": '章⼦怡', "age": 28 }, "children": ['第⼀个⽑孩⼦', '第⼆个⽑孩⼦'], "desc": '峰哥不会告我吧. 没关系. 我想上头条的' } print(dic1.get("wife").get("name")) print(dic1.get("children")) print(dic1.get("children")[1])