1、字典数据结构
# 字典 # 使用 {} 来建立字典 d = {} # 建立了一个空字典 # 建立一个保护有数据的字典 # 语法: # {key:value,key:value,key:value} # 字典的值能够是任意对象 # 字典的键能够是任意的不可变对象(int、str、bool、tuple ...),可是通常咱们都会使用str # 字典的键是不能重复的,若是出现重复的后边的会替换到前边的 # d = {'name':'孙悟空' , 'age':18 , 'gender':'男' , 'name':'sunwukong'} d = { 'name':'孙悟空' , 'age':18 , 'gender':'男' , 'name':'sunwukong' } # print(d , type(d)) # 须要根据键来获取值 # print(d['name'],d['age'],d['gender']) # 若是使用了字典中不存在的键,会报错 # print(d['hello']) KeyError: 'hello'
2、字典的使用app
# - 字典属于一种新的数据结构,称为映射(mapping) # - 字典的做用和列表相似,都是用来存储对象的容器 # - 列表存储数据的性能很好,可是查询数据的性能的不好 # - 在字典中每个元素都有一个惟一的名字,经过这个惟一的名字能够快速的查找到指定的元素 # - 在字典中能够保存多个对象,每一个对象都会有一个惟一的名字 # 这个惟一的名字,咱们称其为键(key),经过key能够快速的查询value # 这个对象,咱们称其为值(value) # 因此字典,咱们也称为叫作键值对(key-value)结构 # 每一个字典中均可以有多个键值对,而每个键值对咱们称其为一项(item) # 建立字典 # 使用{} # 语法:{k1:v1,k2:v2,k3:v3} # 使用 dict()函数来建立字典 # 每个参数都是一个键值对,参数名就是键,参数名就是值(这种方式建立的字典,key都是字符串) d = dict(name='孙悟空',age=18,gender='男') # 也能够将一个包含有双值子序列的序列转换为字典 # 双值序列,序列中只有两个值,[1,2] ('a',3) 'ab' # 子序列,若是序列中的元素也是序列,那么咱们就称这个元素为子序列 # [(1,2),(3,5)] d = dict([('name','孙悟饭'),('age',18)]) # print(d , type(d)) d = dict(name='孙悟空',age=18,gender='男') # len() 获取字典中键值对的个数 # print(len(d)) # in 检查字典中是否包含指定的键 # not in 检查字典中是否不包含指定的键 # print('hello' in d) # 获取字典中的值,根据键来获取值 # 语法:d[key] # print(d['age']) # n = 'name' # print(d[n]) # 经过[]来获取值时,若是键不存在,会抛出异常 KeyError # get(key[, default]) 该方法用来根据键来获取字典中的值 # 若是获取的键在字典中不存在,会返回None # 也能够指定一个默认值,来做为第二个参数,这样获取不到值时将会返回默认值 # print(d.get('name')) # print(d.get('hello','默认值')) # 修改字典 # d[key] = value 若是key存在则覆盖,不存在则添加 d['name'] = 'sunwukong' # 修改字典的key-value d['address'] = '花果山' # 向字典中添加key-value # print(d) # 增 setdefault(key[, default]) 能够用来向字典中添加key-value # 若是key已经存在于字典中,则返回key的值,不会对字典作任何操做 # 若是key不存在,则向字典中添加这个key,并设置value result = d.setdefault('name','猪八戒') #不会把name改为猪八戒 由于name已经存在。 result = d.setdefault('hello','猪八戒') # print('result =',result) # print(d) # 改 update([other]) # 将其余的字典中的key-value添加到当前字典中 # 若是有重复的key,则后边的会替换到当前的 d = {'a':1,'b':2,'c':3} d2 = {'d':4,'e':5,'f':6, 'a':7} d.update(d2) # print(d) # 删 删除,可使用 del 来删除字典中的 key-value del d['a'] del d['b'] # popitem() # 随机删除字典中的一个键值对,通常都会删除最后一个键值对 # 删除以后,它会将删除的key-value做为返回值返回 # 返回的是一个元组,元组中有两个元素,第一个元素是删除的key,第二个是删除的value # 当使用popitem()删除一个空字典时,会抛出异常 KeyError: 'popitem(): dictionary is empty' # d.popitem() # result = d.popitem() # pop(key[, default]) # 根据key删除字典中的key-value # 会将被删除的value返回! # 若是删除不存在的key,会抛出异常 # 若是指定了默认值,再删除不存在的key时,不会报错,而是直接返回默认值 result = d.pop('d') result = d.pop('z','这是默认值') # del d['z'] z不存在,报错 # result = d.popitem() # result = d.popitem() # result = d.popitem() # result = d.popitem() # clear()用来清空字典 d.clear() # print('result =',result) # print(d) # copy() # 该方法用于对字典进行浅复制 # 复制之后的对象,和原对象是独立,修改一个不会影响另外一个 # 注意,浅复制会简单复制对象内部的值,若是值也是一个可变对象,这个可变对象不会被复制,直接把地址给引用过来 d = {'a':1,'b':2,'c':3} d2 = d.copy() # d['a'] = 100 d = {'a':{'name':'孙悟空','age':18},'b':2,'c':3} d2 = d.copy() d2['a']['name'] = '猪八戒' print('d = ',d , id(d))#输出结果d ={'a': {'name': '猪八戒', 'age': 18}, 'b': 2, 'c': 3} 35065144 print('d2 = ',d2 , id(d2))#d2 ={'a': {'name': '猪八戒', 'age': 18}, 'b': 2, 'c': 3} 41238248
3、遍历字典函数
# 遍历字典 # keys() 该方法会返回字典的全部的key # 该方法会返回一个序列,序列中保存有字典的全部的键 d = {'name':'孙悟空','age':18,'gender':'男'} # 经过遍历keys()来获取全部的键 # for k in d.keys() : # print(k , d[k]) # values() # 该方法会返回一个序列,序列中保存有字典的左右的值 # for v in d.values(): # print(v) # items() # 该方法会返回字典中全部的项 # 它会返回一个序列,序列中包含有双值子序列 # 双值分别是,字典中的key和value # print(d.items()) for k,v in d.items() : print(k , '=' , v)
4、集合性能
# ## 集合(set) # - 集合和列表很是类似 # - 不一样点: # 1.集合中只能存储不可变对象 # 2.集合中存储的对象是无序(实际上不是按照元素的插入顺序保存),列表中是有序的 # 3.集合中不能出现重复的元素 # 集合 # 使用 {} 来建立集合 s = {10,3,5,1,2,1,2,3,1,1,1,1} # <class 'set'> # s = {[1,2,3],[4,6,7]} TypeError: unhashable type: 'list' # 使用 set() 函数来建立集合 s = set() # 空集合 # 能够经过set()来将序列和字典转换为集合 s = set([1,2,3,4,5,1,1,2,3,4,5]) s = set('hello') s = set({'a':1,'b':2,'c':3}) # 使用set()将字典转换为集合时,只会包含字典中的键 # 建立集合 s = {'a' , 'b' , 1 , 2 , 3 , 1} # 使用in和not in来检查集合中的元素 # print('c' in s) # 使用len()来获取集合中元素的数量 # print(len(s)) # add() 向集合中添加元素 s.add(10) s.add(30) # update() 将一个集合中的元素添加到当前集合中 # update()能够传递序列或字典做为参数,字典只会使用键 s2 = set('hello') s.update(s2) s.update((10,20,30,40,50)) s.update({10:'ab',20:'bc',100:'cd',1000:'ef'}) # {1, 2, 3, 100, 40, 'o', 10, 1000, 'a', 'h', 'b', 'l', 20, 50, 'e', 30} # pop()随机删除并返回一个集合中的元素 # result = s.pop() # remove()删除集合中的指定元素 s.remove(100) s.remove(1000) # clear()清空集合 s.clear() # copy()对集合进行浅复制 # print(result) print(s , type(s))
5、集合的运算spa
# 在对集合作运算时,不会影响原来的集合,而是返回一个运算结果 # 建立两个集合 s = {1,2,3,4,5} s2 = {3,4,5,6,7} # & 交集运算 result = s & s2 # {3, 4, 5} # | 并集运算 result = s | s2 # {1,2,3,4,5,6,7} # - 差集 result = s - s2 # {1, 2} # ^ 异或集 获取只在一个集合中出现的元素 result = s ^ s2 # {1, 2, 6, 7} # <= 检查一个集合是不是另外一个集合的子集 # 若是a集合中的元素所有都在b集合中出现,那么a集合就是b集合的子集,b集合是a集合超集 a = {1,2,3} b = {1,2,3,4,5} result = a <= b # True result = {1,2,3} <= {1,2,3} # True result = {1,2,3,4,5} <= {1,2,3} # False # < 检查一个集合是不是另外一个集合的真子集 把=那种状况去掉 # 若是超集b中含有子集a中全部元素,而且b中还有a中没有的元素,则b就是a的真超集,a是b的真子集 result = {1,2,3} < {1,2,3} # False result = {1,2,3} < {1,2,3,4,5} # True # >= 检查一个集合是不是另外一个的超集 # > 检查一个集合是不是另外一个的真超集 print('result =',result)