day 05 字典
字典/集合
一.什么是字典?
字典是无序的,无法通过索引切片
字典是以 "key:value"的形式来保存数据
用 {}表示. 存储的是key:value
字典的key值不能重复,必须是可hash(可hash的东西都是不可变的)的
二.字典的增删改查(重点)
增:
1.dic[新key] = 值
dic= {"河南":"胡辣汤", "开封": "灌汤包", "武汉":"热干面"} dic['云南'] = "烩面" # 老key = 值 print(dic)
2.dic.setdefault("key","value")(有添加的功能,如果key是存在的. 不添加
流程: 判断你给的key是否在字典中存在了.如果已经存在了. 就不再新增. 如果不存在. 执行新增操作)
dic = {"意大利": "李云龙", "美国": "美国往事"} dic.setdefault("美国", "三傻大闹宝莱坞") print(dic)
3.dic.fromkeys
seq = ('name', 'age', 'sex') dict = dict.fromkeys(seq) print ("新的字典为 : %s" % str(dict)) dict = dict.fromkeys(seq, 10) print ("新的字典为 : %s" % str(dict)) #结果为: 新的字典为 : {'age': None, 'name': None, 'sex': None} 新的字典为 : {'age': 10, 'name': 10, 'sex': 10}
删:
1.pop(key),(指定删除某个""key")
dic = {"张艺谋":"红高粱", "李安":"断臂山", "陈凯歌":"霸王别姬", "郭德纲":"祖宗十九代"} dic.pop("郭德纲")
2.del dic[key],(指定删除某个""key",与pop的写法不同,删除指定的某一个元素,也可以删除整个字典)
dic = {"张艺谋":"红高粱", "李安":"断臂山", "陈凯歌":"霸王别姬", "郭德纲":"祖宗十九代"} del dic["李安"] print(dic)
3.dic.popitem(),(随机删除某一项,默认删除最后一位)
dic = {"张艺谋":"红高粱", "李安":"断臂山", "陈凯歌":"霸王别姬", "郭德纲":"祖宗十九代"} dic.popitem() print(dic)
4.dic.clear(),(清空字典里的内容,保留空字典)
dic = {"张艺谋":"红高粱", "李安":"断臂山", "陈凯歌":"霸王别姬", "郭德纲":"祖宗十九代"} dic.clear() print(dic)
改:
1.dic["老key"] = "新值"
dic = {"河南":"胡辣汤", "开封": "灌汤包", "武汉":"热干面"} dic['河南'] = "烩面" # 老key = 值 print(dic)
2.dic1.update("dic2")
dic = {"赵四":"刘晓光", "刘能":"王晓利", "王木生":"范伟"} dic2 = {"赵四":"宝宝", "刘能":"萌萌", "皮校长":"皮长山"} dic.update(dic2) print(dic) print(dic2)
查:
1.dic["key"],(直接使用key就可以拿到value)
2.dic.get("key")
dic1 = {"赵四":"刘晓光", "刘能":"王晓利", "王木生":"范伟"} print(dic1.get("刘能能")) # None 当key不存在返回None print(dic1.get("刘能能", "没有这个人")) # 当key不存在. 返回第二个参数. 默认第二个参数是None
2.dic.setdefault(key),第一个功能是添加(当key不存在). 第二个功能是查询(根据你给的key查询)
dic1 = {"赵四":"刘晓光", "刘能":"王晓利", "王木生":"范伟"} ret = dic1.setdefault("赵四") print(ret)
三.字典的嵌套
wf = { "name":"汪峰", "age":52, "hobby":["唱歌", "上头条", "穿皮裤"], "wife": { "name": "章子怡", "age": 49, "hobby":["演戏", "上电视", "当导师"], "tishen": { "name":"萌萌", "age":28 }, "zhuli":{ "name":"磊磊", "age": 20 } }, "zhuli":{ "name":"宝宝", "age":23, "hobby":["抽烟","喝酒","烫头"] }, "children":[{"name":"汪老大"}, {"name":"汪老二"}] }
1.给汪老二添加一个年龄
wf['children'][1]["age"] = 2
2.找到汪峰的助理
print(wf['zhuli']['name'])
3.汪峰老婆替身的名字
print(wf['wife']['tishen']['name'])
4.汪峰老婆的第二个爱好
print(wf['wife']['hobby'][1])
5.汪峰助理的第三个爱好
print(wf['zhuli']['hobby'][2])
6.汪峰的助理+10岁
wf['zhuli']['age'] = wf['zhuli']['age'] + 10
7.汪峰的老婆添加一个爱好("导戏")
wf['wife']['hobby'].append("导戏") # 添加完毕了
8.删除汪峰助理的"抽烟"爱好
wf["zhuli"]["hobby"].remove("抽烟")
四.set 集合
1.什么是集合
集合是可迭代对象
集合中的元素必须可哈希(不可变的)
集合套集合->不能互相嵌套的
集合本身是可变的数据类型 . 不可哈希
集合跟字典一样,是无序的,无法通过索引切片
""{}""就是集合,集合是无序的,集合中的元素是不重复的. 必须是可哈希的(不可变), 字典中的key,集合其实就是不存value的字典
2.集合的去重
s = {"周润发", "大润发", "王润发", "周润发"} # 不重复的 print(s)
3.集合的去重
>>>可把列表转换成集合,可以做到去重的作用<<<
lst = ["麻将", "牌九", "骰子", "扑克", "老胡机", "骰子", "扑克", "老胡机", "扑克", "老胡机", "扑克", "老胡机"] s = set(lst) print(s)
>>>把集合变回成列表,顺序是乱的<<<
lst = ["麻将", "牌九", "骰子", "扑克", "老胡机", "骰子", "扑克", "老胡机", "扑克", "老胡机", "扑克", "老胡机"] s = set(lst) # # 把集合变回列表 # lst = list(s) # print(lst) # 顺序是乱的
4.集合的增删改查
增:
1.set.add("content")(添加一条内容)
s = {"刘嘉玲", "赵本山", "莱昂纳多迪卡普里奥", "罗纳尔多"} s.add("刘嘉玲") # 因为集合是不可重复的,所以这里不会添加,如果没有就会被添加 print(s)
2.set.update({"content1","content2","content3".......}),(迭代更新)
s = {"刘嘉玲", "赵本山", "莱昂纳多迪卡普里奥", "罗纳尔多"} s.update({"刘嘉玲", "刘能", "赵四"}) # 迭代更新 print(s) #结果: # {'刘嘉玲', '罗纳尔多', '赵本山', '赵四', '莱昂纳多迪卡普里奥', '刘能'}
删/改:
1.set.remove("content")
# s = {"刘嘉玲", "赵本山", "莱昂纳多迪卡普里奥", "罗纳尔多"} # 把罗纳尔多修改成梅西 # s.remove("罗纳尔多") # s.add("梅西") # print(s)
5.交集.并集.差集.反差集
s1 = {"门神", "灯神", "灯神你在笑什么?"} s2 = {"门神", "灯神", "你俩在干什么?"}
1.交集
print(s1 & s2) print(s1.intersection(s2))
2.并集
print(s1 | s2) print(s1.union(s2))
3.差集
print(s1 - s2) # s1中特有的内容 print(s1.difference(s2))
4.反差集
print(s1 ^ s2) # 两个集合中特有的内容 print(s1.symmetric_difference(s2))