#字典创建的两种方式 #第一种,使用花括号 dict_1 = {'num':'20210101','name':'Liming','sex':'male'} print(dict_1) #第二种,使用内置函数dict() # 2.1 通过其他字典创建 dict_2 = dict(dict_1) print(dict_2) print(dict_2 is dict_2) # True # 2.2 通过关键字参数创建 dict_3 = dict(num = "20210101",name = "Liming",sex = 'male') print(dict_3) print(dict_1 == dict_3) #True print(dict_1 is dict_3) #False # 2.3 通过键值对的序列创建 dict_4 = dict([('num',"20210101"),('name',"Liming"),('sex',"male")]) print(dict_3) #2.4 通过dict和zip结合创建 dict_5 = dict(zip(['num','name','sex'],['20210101','Liming','male'])) print(dict_5) if dict_1 == dict_2 == dict_3 == dict_4 == dict_5: #判断字典的值是否相同 print("创建字典的5种方式相同") else: print("创建字典的5种方式不同")
x = {'a':1,'b':2,"b":3} print(x) #运行结果 {'a': 1, 'b': 3}
dict_1 = dict.fromkeys(['zhangsan','wangwu']) print(dict_1) dict_2 = dict.fromkeys(['zhang_san','wang_wu'],18) print(dict_2) dict_3 = dict.fromkeys(['zhang_san','wang_wu'],b) print(dict_3) #从下面四行代码可以看出,当他们值为可变序列并且引用地址相同时,类似于浅copy dict_3['wang_wu'].pop() print(dict_3) dict_3['wang_wu'].append(10) print(dict_3) #运行结果 {'zhangsan': None, 'wangwu': None} {'zhang_san': 18, 'wang_wu': 18} {'zhang_san': [18], 'wang_wu': [18]} {'zhang_san': [], 'wang_wu': []} {'zhang_san': [10], 'wang_wu': [10]}
a.根据键访问值
#根据键访问值 dict_1 = {"name":"张飞","age":18,"sex":"male"} print(dict_1["name"]) print(dict_1["sex"]) #print(dict_1["x"]) 指定的键不存在,抛出异常
b.使用get()方法访问值
#使用get()方法访问值 dict_1 = {"name":"张飞","age":18,"sex":"male"} print(dict_1.get("name")) print(dict_1.get("x")) #返回None print(dict_1.get("x",18)) #当键不存在时,输出设置的默认值,并不会把键x存入dect_1 print(dict_1.get("age",19)) #当键存在时,输出age原本的值
#in和not in在字典中的使用:判断键是否在字典中 dict_1 = {"name":"张飞","age":18,"sex":"male"} print("name" in dict_1) #True print("张飞" in dict_1) #False print("张飞" not in dict_1) #True
dict_1 = {"name":"张飞","age":18} print(dict_1) dict_1["name"] = "李四" #name键存在字典dict_1中,所以此处为修改name的值 print(dict_1) dict_1["sex"] = "male" #sex键不存在字典dict_1中,所以此处为添加新的键值对 print(dict_1) #输出结果 {'name': '张飞', 'age': 18} {'name': '李四', 'age': 18} {'name': '李四', 'age': 18, 'sex': 'male'}
dict_1 = {"name":"张飞","age":18,"sex":"male"} del dict_1["name"] print(dict_1) #运行结果 {'age': 18, 'sex': 'male'}
dict_1 = {"name":"张飞","age":18,"sex":"male"} dict_1.clear() print(dict_1) #运行结果 {}
dict_1 = {"name":"张飞","age":18,"sex":"male"} print(dict_1.pop("age")) #删除键age与其值,pop()方法的返回值为,删除的该键的值 print(dict_1) print(dict_1.pop('age',17)) print(dict_1) print(dict_1.pop('name',"里斯")) print(dict_1)
dict_1 = {"name":"张飞","age":18,"sex":"male"} x = dict_1.popitem() print(x,type(x)) print(dict_1) #运行结果 ('sex', 'male') <class 'tuple'> {'name': '张飞', 'age': 18}
dict_1 = {"name":"张飞","age":18} dict_2 = {"name":"李四","sex":"male"} dict_1.update(dict_2) print(dict_1) print(dict_2) #运行结果 {'name': '李四', 'age': 18, 'sex': 'male'} {'name': '李四', 'sex': 'male'}
#keys()方法:获取字典中所有的key dict_1 = {"name":"张飞","age":18,"sex":"male"} key_1 = dict_1.keys() print(key_1,type(key_1)) #可以看出获取到了字典所有的键,并存放在了一个貌似列表的dict_keys视图中 key_2 = list(key_1) #将对象key_1视图变成列表,并不改变原来的key_1视图 print(key_1) print(key_2) #运行结果 dict_keys(['name', 'age', 'sex']) <class 'dict_keys'> dict_keys(['name', 'age', 'sex']) ['name', 'age', 'sex']
#values()方法:获取字典中所有的value dict_1 = {"name":"张飞","age":18,"sex":"male"} value_1 = dict_1.values() print(value_1,type(value_1)) #可以看出获取到了字典所有的值,并存放在了一个貌似列表的dict_values视图中 value_2 = list(value_1) print(value_1) print(value_2) #运行结果 dict_values(['张飞', 18, 'male']) <class 'dict_values'> dict_values(['张飞', 18, 'male']) ['张飞', 18, 'male']
#items()方法:获取字典中所有的键值对 dict_1 = {"name":"张飞","age":18,"sex":"male"} items_1 = dict_1.items() #可以看出获取到了字典所有的键值对,并将键值对存放在了元组中,再把元组存放在列表中,视图类型为:dict_items print(items_1,type(items_1)) items_2 = list(items_1) #将视图转换成列表 print(items_2) items_3 = tuple(items_2) #将列表转换成元组 print(items_2) print(items_3) #运行结果 dict_items([('name', '张飞'), ('age', 18), ('sex', 'male')]) <class 'dict_items'> [('name', '张飞'), ('age', 18), ('sex', 'male')] [('name', '张飞'), ('age', 18), ('sex', 'male')] (('name', '张飞'), ('age', 18), ('sex', 'male'))
·当变量x为一个时,x会直接获取列表(元组)的值
·当变量x,y···的个数刚好与列表(元组)的个数相同时,则直接将值依次赋给变量
注意:只有在使用列表和元组和集合的两两组合时才能这样使用。
""" 使用for循环遍历,列表和元组的组合时, ·当变量x为一个时,x会直接获取列表(元组)的值 ·当变量x,y···的个数刚好与列表(元组)的个数相同时,则直接将值依次赋给变量 """ a = [('Mary', 'C',"d"),('Jone', 'java',"d"),('Lily', 'Python',"d"),('Lily', 'Python',"d")] for x in a: print(x) #列表里面存储的元组,只有一个变量x,所以将元组直接赋值给x print("============================================") for x,y,z in a: #列表里面存储的元组,每个元组里面存储了3个元素,刚好可以用三个变量xyz接收这三个元素 print(x,y,z) print("============================================") a = (['Mary', 'C',"d"],['Jone', 'java',"d"],['Lily', 'Python',"d"],['Lily', 'Python',"d"]) for x in a: #元组里面存储的列表,只有一个变量x,所以将元组直接赋值给x print(x) print("============================================") for x,y,z in a: #元组里面存储的列表,每个列表里面存储了3个元素,刚好可以用三个变量xyz接收这三个元素 print(x,y,z) #运行结果 ('Mary', 'C', 'd') ('Jone', 'java', 'd') ('Lily', 'Python', 'd') ('Lily', 'Python', 'd') ============================================ Mary C d Jone java d Lily Python d Lily Python d ============================================ ['Mary', 'C', 'd'] ['Jone', 'java', 'd'] ['Lily', 'Python', 'd'] ['Lily', 'Python', 'd'] ============================================ Mary C d Jone java d Lily Python d Lily Python d
a = {('Mary', 'C',"A"),('Jone', 'java',"B"),('Lily', 'Python',"C"),('Lily', 'Python',"D")} for x in a: #集合里面存储的元组,只有一个变量x,所以将元组直接赋值给x print(x) for x,y,z in a: #集合里面存储的元组,每个元组里面存储了3个元素,刚好可以用三个变量xyz接收这三个元素 print(x,y,z) #运行结果 ('Mary', 'C', 'A') ('Lily', 'Python', 'D') ('Jone', 'java', 'B') ('Lily', 'Python', 'C') Mary C A Lily Python D Jone java B Lily Python C
stu_class = { 'Mary': 'C', 'Jone': 'java', 'Lily': 'Python', 'Lilo': 'Python' } for name,cla in stu_class.items(): print(name,"选修的课程为:",cla) #运行结果 Mary 选修的课程为: C Jone 选修的课程为: java Lily 选修的课程为: Python Lilo 选修的课程为: Python
stu_class = { 'Mary': 'C', 'Jone': 'java', 'Lily': 'Python', 'Lilo': 'Python' } for name in stu_class.keys(): print(name) #运行结果 Mary Jone Lily Lilo
stu_class = { 'Mary': 'C', 'Jone': 'java', 'Lily': 'Python', 'Lilo': 'Python' } for cla in stu_class.values(): print(cla) #运行结果 C java Python Python
dict1 = {'user':'runoob','num':[123]} dict2 = dict1 #引用对象 dict3 = dict1.copy() #浅复制,深复制父对象,子对象不复制,还是引用 import copy dict4 = copy.deepcopy(dict1) #深复制,完全复制父对象和子对象 print(1,dict1,id(dict1)) #1 {'user': 'runoob', 'num': [123]} 1630766832896 dict1['user'] = 'root' print(1,dict1,id(dict1)) #1 {'user': 'root', 'num': [123, 23]} 1630766832896 print(2,dict2,id(dict2)) #2 {'user': 'root', 'num': [123, 23]} 1630766832896 print(3,dict3,id(dict3)) #3 {'user': 'runoob', 'num': [123, 23]} 1630766833088 print(4,dict4,id(dict4)) #4 {'user': 'runoob', 'num': [123]} 1630767214080
#集合创建方式一:使用{} set_1 = {"Python","Hello",90} print(set_1) set_2 = {1,1,2,3,4,4,"Python","Python"} #集合中的元素不允许重复 print(set_2) set_3 = {1,2.2,(1,2,3,4),"Python"} print(set_3) #set_4 = {1,2.2,[1,2,3,4]} # 代码报错:集合中的元素不允许为 可变数据类型(可变序列) #集合创建方式二:使用内置函数 set():将字符出、列表、元组、range()等对象转化成集合 set_4 = set("python") print(set_4) set_5 = set([1,2,3,4,5]) print(set_5) set_6 = set((1,2,"Hello")) print(set_6) set_7 = set(range(5)) print(set_7) set_8 = set() #创建空集合 print(set_8) set_9 = {} print(type(set_9)) # <class 'dict'> :所以创建空集合的时候,不能直接使用{}
set_1 = {10,20,30,40,50} print(10 in set_1) #True print(100 in set_1) #False print(20 not in set_1) #False print(100 not in set_1) #True
set_1.add(x)方法:如果数据项x不在结合set_1中,将x添加到set_1中 (一次添加一个元素,元素不重复的前提下)
set_1.update(T)方法:合并结合T中的元素到当前集合set_1中,并自动去除重复元素 (至少添加一个元素,元素不重复的前提下)
#集合添加元素 set_1 = {1,2.2,"Python"} set_2 = {(1,2,True,"Hello"),2.2,"Python","China"} set_1.add((1,2,True,"Hello")) print(set_1) set_1.update(set_2) print(set_1) set_1.update([10,20,30]) #可以添加集合中的元素 print(set_1) set_1.update((40,50,60)) #可以添加元组中过的元素 print(set_1) #运行结果 {1, 2.2, (1, 2, True, 'Hello'), 'Python'} {1, 2.2, 'China', (1, 2, True, 'Hello'), 'Python'} {1, 2.2, 'China', 10, (1, 2, True, 'Hello'), 20, 'Python', 30} {1, 2.2, 'China', 40, 10, (1, 2, True, 'Hello'), 50, 20, 'Python', 60, 30}
S.remove(x)方法:如果x在集合S中,移除该元素;如果x不存在则抛出异常
S.discard(x)方法:如果x在集合S中,移除该元素;如果x不存在不会报错
set_1 = {1,(1,2,True,"Hello"),2.2,"Python"} set_1.remove(1) print(set_1) # set_1.remove(1) #集合中无元素1,执行此代码会抛出异常 set_1.discard(2.2) print(set_1) set_1.discard(2.2) #集合中无元素2.2,不过执行此代码不会抛出异常 print(set_1) #运行结果 {(1, 2, True, 'Hello'), 2.2, 'Python'} {(1, 2, True, 'Hello'), 'Python'} {(1, 2, True, 'Hello'), 'Python'}
S.pop()方法:随机删除并返回集合中过的一个元素,如果集合为空则抛出异常
S.clear()方法:清空集合
set_1 = {1,(1,2,True,"Hello"),2.2,"Python"} print(set_1.pop()) print(set_1) set_1.clear() print(set_1) #set_1.pop() #集合为空,执行此行代码,会抛出异常 #运行结果 1 {2.2, 'Python', (1, 2, True, 'Hello')} set()
set_1 = {10,20,30,40} set_2 = {40,30,10,20} print(set_1 == set_2) #True 比较集合的值是否相等 print(set_1 is set_2) #False 比较集合的引用地址是否相等
A = {1,2,3,4,5,6} B = {1,2,3,4} print(B.issubset(A)) #True B是A的子集
A = {1,2,3,4,5,6} B = {1,2,3,4} print(A.issuperset(B)) #True A是B的超集
A = {1,2,3,4,5,6} B = {1,2,3,4} print(A.isdisjoint(B)) #False 判断A和B是否没有交集 B = {7,8,9,10} print(A.isdisjoint(B)) #True 判断A和B是否没有交集
pass