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)
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄
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)
![](https://liuyixiang.com/zb_users/theme/Lucky/style/image/grey.gif)
更多精彩