一、字典【重点掌握】
本质:是一个无序的,key是唯一的,可变的集合
1.系统功能
# 1.增 dict1 = {"name":"张三","age":18,"score":100,"hobby":"篮球"} print(dict1) # a.key不存在的情况下,字典[key] = value ****** dict1["height"] = 182.0 print(dict1) # b.update(),更新,合并字典,将指定字典中的键值对合并到原字典中 ****** # dict1.update(dict2):将dict2中的所有键值对添加到dict1中 dict2 = {'aaa':10} # 如果key不存在,则添加键值对 dict1.update(dict2) print(dict1) print(dict2) # 如果key存在,则修改指定键对应的值 dict3 = {"name":"李四"} dict1.update(dict3) print(dict1) # c.setdefault(key,default) dict1 = {"name":"张三","age":18,"score":100,"hobby":"篮球"} print(dict1) # 如果default省略,向字典中添加key:None dict1.setdefault("111") print(dict1) # 如果default未省略,则向字典中添加key:default dict1.setdefault("222","hello") print(dict1) # 2.删 # a.pop(key):通过指定key删除键值对,返回对应的value ****** dict1 = {"name":"张三","age":18,"score":100,"hobby":"篮球"} print(dict1) r = dict1.pop("age") print(dict1) print(r) # dict1.pop("height") # KeyError: 'height' # d = dict1.pop("weight",None) # print(dict1) # print(d) # 需求:删除不报错 if dict1.get("weight"): print("key存在") dict1.pop("weight") else: print("key不存在") print("*" * 20) # b.popitem() # 在Python3.7之前,表示随机删除一对键值对,Python3.7之后,可以理解为删除最后一对键值对 dict1 = {"name":"张三","score":100,"hobby":"篮球","age":18} print(dict1) dict1.popitem() print(dict1) # c.del dict1 = {"name":"张三","score":100,"hobby":"篮球","age":18} print(dict1) del dict1["age"] print(dict1) # d.clear() dict1.clear() print(dict1) # del dict1 # 3.改 # 语法:字典[key] = value dict1 = {"name":"张三","score":100,"hobby":"篮球","age":18} print(dict1) dict1["age"] = 20 print(dict1) # 4.查 # a.get(key):获取指定key对应的value # b.keys():获取所有的key # c.values():获取所有的value # d.items():获取所有的键值对 # e.len():获取键值对的对数 # 5.其他 # 关于拷贝,字典和列表中的用法完全相同 # a.=引用赋值 dict1 = {"name":"张三","score":100,"hobby":"篮球","age":18} dict2 = dict1 print(dict1 is dict2) dict1['name'] = "jack" print(dict2) # b.copy(),和列表中的用法完全相同 dict1 = {"name":"张三","score":100,"hobby":"篮球","age":18} dict2 = dict1.copy() print(dict1 is dict2) dict1['name'] = "jack" print(dict2) dict1 = [1,2,3,{"name":"张三","score":100,"hobby":"篮球","age":18}] dict2 = dict1.copy() print(dict1 is dict2) dict1[-1]['name'] = "tom" print(dict2) # c.copy.copy() import copy dict1 = {"name":"张三","score":100,"hobby":"篮球","age":18} dict2 = copy.copy(dict1) print(dict1 is dict2) dict1['name'] = "jack" print(dict2) dict1 = [1,2,3,{"name":"张三","score":100,"hobby":"篮球","age":18}] dict2 = copy.copy(dict1) print(dict1 is dict2) dict1[-1]['name'] = "tom" print(dict2) # d.copy.deepcopy() dict1 = {"name":"张三","score":100,"hobby":"篮球","age":18} dict2 = copy.deepcopy(dict1) print(dict1 is dict2) dict1['name'] = "jack" print(dict2) dict1 = [1,2,3,{"name":"张三","score":100,"hobby":"篮球","age":18}] dict2 = copy.deepcopy(dict1) print(dict1 is dict2) dict1[-1]['name'] = "tom" print(dict2)
2.字典推导式
# 列表推导式:[元素的规律 for循环 if语句] # 字典推导式:{key:value for循环 if语句} # 1.需求:已知字典dict1 = {'a':10,'b':20},交换key和value,生成一个新的字典 【面试题】 dict1 = {'a':10,'b':20} # 方式一 dict2 = {} for key,value in dict1.items(): dict2[value] = key print(dict2) # 方式二 dict2 = {value:key for key,value in dict1.items()} print(dict2) # 2.需求:编写程序,生成一个新的字典{0:0,1:1,2:4,3:9,4:16,5:25} dict3 = {i:i ** 2 for i in range(6)} print(dict3) # 3.需求:编写程序,生成一个新的字典{1:1,3:9,5:25,7:49,9:81} dict4 = {i:i ** 2 for i in range(1,10,2)} print(dict4) dict4 = {i:i ** 2 for i in range(1,10) if i % 2 == 1} print(dict4) # 4.【面试题】和列表推导式的使用方式相同,for循环可以书写多个,if语句也可以书写多个,从左往右表示嵌套 dict5 = {x:y for x in "abc" for y in "xyz"} print(dict5)
二、集合【掌握】
1.概念
Python中的集合跟数学上的集合是一致的,不允许有重复元素,而且可以进行交集、并集、差集等运算
set与dict类似,但是与dict的区别在于只是一组key的集合,不存储value
本质:无序且无重复元素的集合
表示:{},注意:如果直接使用{}则默认表示字典
2.创建
""" 【面试题】列表,元组,字典,集合和字符串的区别 列表: 表示形式:[元素1,元素2....] 本质:是一种有序的,可变的,可以存储重复元素的,可以存储不同类型数据的集合 元组: 表示形式:(元素1,元素2....) 本质:是一种有序的,不可变的,可以存储重复元素的,可以存储不同类型数据的集合 字典: 表示形式:{key1:value1....} 本质:是一种有序的,可变的,key不允许重复,value可以重复,key只能是不可变的数据类型,存储键值对的集合 集合: 表示形式:{元素1,元素2....} 本质:是一种无序的,可变的,不允许元素重复的,可以存储不同类型数据集合 字符串: 表示形式:双引号 单引号 三引号 本质:是一种有序的,不可变的,可以存储重复字符的集合 """ # 1.注意:{}为空则表示字典 # 【面试题】下面代码打印的结果是什么 set1 = {} print(type(set1)) # <class 'dict'> # 2.空集合 set2 = set() print(set2) # 3.{}不为空,其中的元素不是键值对,则表示集合 dict1 = {"a":10} print(type(dict1)) # <class 'dict'> set1 = {"a",10} print(type(set1)) # <class 'set'> # 说明1:列表和元组都是允许重复元素存在的,所以将列表和元素转化为集合,会警告 set2 = set([34,4,6,78]) print(set2) set2 = set((34,4,6,78)) print(set2) # 说明2:集合是无序的,排重的,该特点类似于字典中的key set2 = set({'a':10,"b":20,"c":30}) print(set2) # {'a', 'b', 'c'} # 4. # 注意1:集合是无序的 set4 = {45,4,656,5,677,87,9} print(set4) # 注意2:集合是排重的 set4 = {45,4,656,9,5,9,677,87,9,9,9,9,9,9} print(set4) # int(x) float(x) bool(x) str(x) list(x) tuple(x) dict(x) set(x)