# ### 容器类型数据 set 和 dict # ### set 集合 (用来做交叉并补 集合操作的) '''自动去重 无序''' # (1) 定义一个空集合 setvar = set() #{} 不是集合 而是一个字典 print(setvar,type(setvar)) # (2)自动去重 无序 setvar = {"周杰伦","王宝强","李宇春"} print(setvar) setvar = {"刘德华","张学友","郭富城","王文","王文"} print(setvar) # (3) 既不可获取 也不可修改 # res = setvar[0] # ### dict 字典 """ # 关于字典 在3.6版本之前,字典无序, 在3.6版本之后,字典有序(看起来有序,本质上无序) 哈希算法: 将不可变的任意长度值计算成具有固定长度的唯一值, 这个值可正可负,可大可小,通过计算出来的键,来获取值,形成一一映射的效果 管这个算法叫哈希算法,这个值叫哈希值 字典进行存储的时候,并不一定按照字面顺序依次存在内存中 而是通过哈希算法,随机散列的把键所对应的值存储在内存里,所以字典无序(为了求效率,图快) 可以通过哈希算出的键获取散列的值 3.6的之后,记录了字典的字面顺序,在取出数据时,进行重新排序,所以看起来有序(但本质上无序,只要他使用了哈希) 可哈希数据(不可变的数据) : Number(int float complex bool) str tuple 不可哈希数据(可变数据) : list set dict (list dict 值可变 ; set 顺序可变) 字典的键 集合的值 都需要可哈希数据,剩下的数据无所谓. """ '''由键值对数据组成,有序''' # 定义一个空字典 dictvar = {} print(dictvar,type(dictvar)) ''' # 语法: dictvar = {'a':1} # "键" : "值" 键和值之间用冒号隔开, 键值对之间用逗号隔开 ''' dictvar = {"top":"程咬金" , "middle":"妖姬" , "bottom":"崔丝塔娜" , "jungle":"七大大声" , "support":"德玛西亚"} print(dictvar,type(dictvar)) # 获取字典当中的值 (通过键来获取值) res = dictvar['middle'] print(res) # 通过字典的键来修改值 dictvar['top'] = "赵信" print(dictvar) # 可哈希数据 (字典) 不推荐如下使用键 一般就用变量命名的字符串形式去定义键 dictvar = {35:1,36:True,3.15:"111",False:"112233",3+2j:12,"大帅哥":78, (11,22,333):4 } print(dictvar) # 获取4 print(dictvar[(11,22,333)]) dictvar[False] = 67 print(dictvar) # 可哈希数据 (集合) # setvar = {1,2,3,[4,5,6]} # print(setvar) # 字典的键唯一 如果两个键相同 后面的覆盖前面的 # 字典的键是唯一不可修改,字典的值随意 dictvar = {"a":1,'a':2} print(dictvar)