05,.字典,集合
1.什么是字典
字典是以key:value的形式来保存数据,用{}表示. 存储的是key:value
坑: 字典存储数据的时候是用的hash值来存储. 算法不能变(python的)
# 数据必须是不可变的(可哈希). 字典的key必须是可哈希的(不可变).
dic = {"jay":"周杰伦", "jj": "林俊杰", "jolin":"蔡依林"}
print(dic['jay']) # 周杰伦
dic['jay'] = "麻花藤" #字典的key是不变的,可以通过key来带出value的信息
2.字典的增删改查
1.增加,添加:
dic[新key] = 元素
dic = {"意大利": "李云龙", "美国": "美国往事"}
dic["日本"] = "东京审判" # 新key表示添加
dic['韩国'] = "釜山行
dic["日本"] = "鬼片"
setdefault()(难点) 有添加的功能,如果key是存在的,不添加, setdefault("","")
dic = {"意大利": "李云龙", "美国": "美国往事"}
dic.setdefault("美国", "三傻大闹宝莱坞")
print(dic)
2.删除
pop(key) 主要要记得,删除key后,同value一起删除掉
dic = {"张艺谋":"红高粱", "李安":"断臂山", "陈凯歌":"霸王别姬", "郭德纲":"祖宗十九代"}
dic.pop("郭德纲")
print(dic) #{'张艺谋': '红高粱', '李安': '断臂山', '陈凯歌': '霸王别姬'}
popitem() 随机删除一项,在python早期的版本,字典是无序的
dic = {"张艺谋":"红高粱", "李安":"断臂山", "陈凯歌":"霸王别姬", "郭德纲":"祖宗十九代"}
dic.popitem() # 随机删除一项. 在python早期版本 字典是无序的.
print(dic) #{'张艺谋': '红高粱', '李安': '断臂山', '陈凯歌': '霸王别姬'}
clear() 清空字典中的所有内容
del dic["key"] 跟pop的区别在于使用的语法:pop(key)
dic = {"张艺谋":"红高粱", "李安":"断臂山", "陈凯歌":"霸王别姬", "郭德纲":"祖宗十九代"}
del dic["李安"]
print(dic) #{'张艺谋': '红高粱', '陈凯歌': '霸王别姬', '郭德纲': '祖宗十九代'}
3.修改
dic[老key] = 值
dic = {"河南":"胡辣汤", "开封": "灌汤包", "武汉":"热干面"}
dic['河南'] = "烩面" # 老key = 值
print(dic)
update() 更新字典
dic = {"id": 123, "name": 'sylar', "age": 18}
dic1 = {"id": 456, "name": "麻花藤", "ok": "wtf"}
dic.update(dic1) # 把dic1中的内容更新到dic中. 如果key重名. 则修改替换. 如果不存 在key, 则新增.
print(dic)
print(dic1)
4.查询
dic[key]
dic1 = {"赵四":"刘晓光", "刘能":"王晓利", "王木生":"范伟"} # 直接使用key就可以拿到value
print(dic1["赵四四"]) # KeyError: '赵四四' key不存在
get(key,值)
print(dic1.get("刘能能")) # None 当key不存在返回None
print(dic1.get("刘能能", "没有这个人")) # 当key不存在. 返回第二个参数. 默认第二个参数是None
setdefault("key","value") 第一个功能是天加(当key不存在的时候). 第二个功能是查询(根据你给的key查询). 如果key不存在,先执行新增的操作,在使用key把对应的value查询出来
3.字典的相关操作
1. keys() 获取到所有的键
dic = {"id": 123, "name": 'sylar', "age": 18, "ok": "科⽐"}
print(dic.keys()) # dict_keys(['id', 'name', 'age', 'ok']) 不⽤管它是什么.当 成list来⽤就⾏
for key in dic.keys():
print(key)
2. values() 获取到所有的值
dic = {"id": 123, "name": 'sylar', "age": 18, "ok": "科⽐"}
for value in dic.values():
print(value)
3. items() 拿到所有的键值对
dic = {"id": 123, "name": 'sylar', "age": 18, "ok": "科⽐"}
print(dic.items()) # dict_items([('id', 123), ('name', 'sylar'), ('age', 18), ('ok', '科⽐')]) 这个东⻄也是list. 只不过list中装的是tuple for key, value in dic.items(): # ?? 这个是解构
print(key, value)
4..字典的嵌套
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":"汪老二"}]
}
wf['children'][1]["age"] = 2 #在children里面新建字典{"age":"2"}
print(wf)
# print(wf['zhuli']['name']) #输出名字
print(wf)
# 汪峰老婆替身的名字
print(wf['wife']['tishen']['name'])
# 汪峰老婆的第二个爱好
print(wf['wife']['hobby'][1])
# 汪峰助理的第三个爱好
print(wf['zhuli']['hobby'][2])
# 汪峰的助理+10岁
wf['zhuli']['age'] = wf['zhuli']['age'] + 10
# 汪峰的老婆添加一个爱好("导戏")
wf['wife']['hobby'].append("导戏") # 添加完毕了
# 删除汪峰助理的"抽烟"爱好
wf["zhuli"]["hobby"].remove("抽烟")
print(wf)
5.集合(不重要).去重复 唯一能用到的点,就是去重复
s = {"周润发", "大润发", "王润发", "周润发"} # 不重复的
print(s) #{'大润发', '周润发', '王润发'}
集合和字典,是没有索引和切片的
集合中的元素是不可重复的.必须是可哈希的(不可变),字典中的key
lst = ["麻将", "牌九", "骰子", "扑克", "骰子", "扑克", "扑克", "扑克"]
# 把列表转化成集合 x 转化成y类型 y()
s = set(lst)
print(s)
# 把集合变回列表
# lst = list(s)
print(lst) # 顺序是乱的
空集合:set()
空元组: tuple()
空列表: list()
非空集合:{123}
新增:
add 添加 #需要记住的
s = {"刘嘉玲", "赵本山", "莱昂纳多迪卡普里奥", "罗纳尔多"}
s.add("刘嘉玲")
print(s)
update 迭代更新
s.update({"刘嘉玲", "刘能", "赵四"}) # 迭代更新
print(s)
删除:
pop() 随机弹一个,随机删除
ret = s.pop() # 随机删除一个
print(s)
print(ret)
remove() 指定删除
s.remove("罗纳尔多")
print(s)
修改 : 只能先删除在添加
s = {"刘嘉玲", "赵本山", "莱昂纳多迪卡普里奥", "罗纳尔多"}
把罗纳尔多修改成梅西
s.remove("罗纳尔多")
s.add("梅西")
print(s)
# 迭代
# for el in s:
# print(el)
# s1 = {"门神", "灯神", "灯神你在笑什么?"}
# s2 = {"门神", "灯神", "你俩在干什么?"}
# 交集
# print(s1 & s2)
# print(s1.intersection(s2))
# 并集
# print(s1 | s2)
# print(s1.union(s2))
# # 差集
# print(s1 - s2) # s1中特有的内容
# print(s1.difference(s2))
#
# # 反交集
# print(s1 ^ s2) # 两个集合中特有的内容
# print(s1.symmetric_difference(s2))
# 集合本身是可变的数据类型 . 不可哈希
# 集合套集合->不能互相嵌套的
# 集合中的元素必须可哈希(不可变的)
# s = {123}
# 如果非要集合套集合
# s = frozenset({"哈哈","呵呵"}) # 不可变的数据类型(集合)
# for el in s:
# print(el)