字典
? 字典(dict)是python中唯一一个映射类型,在python中key是唯一的,在保存的时候,根据key计算出一个内存地址,然后将key-value保存在这个地址中,这种算法被称为hash算法.所以,在dict中存储的键值对中的key必须是可哈希的.(可以改变的都是不可哈希的,那么可哈希的就意味着不可变.)这是为了能准确地计算内存地址而规定的.还有,dict保存的数据不是按照我们添加进去的顺序保存的,是按照hash表的顺序保存的,而hash表不是连续的,所以不能进行切片工作,只能通过key来获取dict中的数据.
- 已知的可哈希(不可变)的数据类型:int,bool,str,tuple;不可哈希(可变)的数据类型:list,dict,set
- 顺便回忆:可迭代的数据类型:除了int和bool,其他都可迭代
- 增
? 字典名[键] = 值 无则添加,有则修改
? 字典名.setdefault(键,值): 无则添加,有则不添加
- 删
? 字典名.pop(键) 通过键进行删除.原地删除,返回的也是被删除的值
? 字典名.popitem() 随机删除 python3.6默认删除最后一个,返回值是被删除的键值对
? 字典名.clear() 清空
? del 字典名 删除整个容器
? del 字典名[键] 通过键进行删除
? 字典中没有remove
- 改
? 字典名[键] = 值 无则添加,有则修改
? 字典名.update(新字典名) 当新字典中没有源字典的键值对时就添加到源字典中,有就修改
- 查
? 字典名.get(键) 查询不到返回None
? 字典名.get(键,自定内容) 查询不到返回自定内容
? 字典名.setdefault(键,自定内容) 查询不到返回自定内容,没有自定内容返回None
? 字典名[键] 查询不到报错
for i in dic: # 查看所有的键 print(i) for i in dic: # 查看所有的值 print(dic.get(i)) print(dic.keys()) # 获取到的是一个高仿列表 print(dic.values()) # 高仿列表支持迭代,不支持索引 print(dic.items()) # 这个高仿列表存放的是多个元组,元组中第一个元素是键,第二个元素是值
- 其他方法:
dic = {} dic.fromkeys("abc",[]) # 批量创建键值对 "a":[],"b":[],"c":[] print(dic) # {} dic1 = dic.fromkeys("abc",[]) print(dic1) # {'a': [], 'b': [], 'c': []} # fromkeys 第一个人参数必须是可迭代对象,会将可迭代对象进行迭代,成为字典的键,另一个参数是值(这个值是共用的);共用的值是可变数据类型就会有坑,不可变数据类型就没事
- 解构
? 解构可以将内容分别赋值到变量中.
a,b = b,a 一行代码进行数值交换 a,b = 1,2 print(a,b) # 1 2 a,b = ('汪峰':'北京','王菲':'天后') print(a,b) # 汪峰 王菲 for k,v in dic.items(): print('这是键:',k) print('这是值:',v) dic = {"key1":2,"key2":4} for i in dic.items(): a,b = i # 自己写的解构 print(a) print(b) for a,b in dic.items(): print(a) print(b)
集合
? 集合set 是一个没有值的字典.因为集合的元素要求是不可变且唯一,我们就利用它的唯一来做去重
? 集合是无序,可变的数据类型
- 增
s = set() s.add("alex") print(s.add("alex")) # None s.update("wusir") # 迭代添加 print(s.update("wusir")) # None print(s) set("wusir") # 迭代添加 print(s)
- 删
s = {100,0.1,0.5,1,2,23,5,4} s.remove(4) # 通过元素删除 print(s) s.clear() # 清空 s.pop() # 随机删除 (最小的) print(s)
- 改:先删再加
- 查:for循环
- 其他操作
# 其他操作: s = {1,23,9,4,5,7} s1 = {1,2,3,4,5} # 差集 - print(s - s1) # {9, 23, 7} print(s1 - s) # {2,3} # 交集 & print(s & s1) # {1,4,5} # 并集 |(管道符) print(s | s1) # {1,2,3,23,4,5,9,7} # 反交集 shift + 6 == ^ print(s ^ s1) # {2,3,23,9,7} s = {1,23,9,4,5,7} s1 = {1,4,5} # 子集 返回的一个布尔值 print(s > s1) # True # 父集(超集) print(s1 < s) # True print(frozenset({1,23,4,5})) # 冻结集合
原文地址:https://www.cnblogs.com/lingshuai/p/11565049.html