- 字典
- 字典的增删改查
- 字典的其他方法
- 字典的嵌套
- 集合
字典——字典的读取速度要更快
python3.6以上 的版本字典是有序的,怎么写怎么打印
一般说字典是无序的
dic={'键':'值',}
键:不可变数据类型,可哈希
值:任意
字典的增删改查
# dic={ # 1:'你好', # True:'Hello', # 'dict':'get', # 1:'HI' # } # 增 # print(dic)#结果{1: 'HI', 'dict': 'get'} 在字典中True就是1,后边的1会覆盖前面的 # dic[2]='大家好'#通过指定键值添加 # print(dic)#结果{1: 'HI', 'dict': 'get', 2: '大家好'} # print(dic.setdefault('dict'))#setdefault方法,写存在的键得到的是值 # print(dic.setdefault(' '))#写不存在的键,返回值为None # print(dic.setdefault('get','post'))#写不存在的键和值,返回的是值 # print(dic)#可以通过sedefault('键','值')来添加
setdefault方法详解
1.先去字典中查有没有这个键的信息,返回一个None
2.如果有,就不添加
3。如果是None,就添加
# dic={ # 1:'你好', # True:'Hello', # 'dict':'get', # 1:'HI' # } # 删 # del dic#删除整个dic # print(dic)#结果{1: 'HI', 'dict': 'get'} # del dic[1]#按照键去删除 # print(dic) # dic.clear()#清空列表 # print(dic) # dic.pop(1)#pop(键),删除,有返回值
print(dic)
dic={'33':'gg','44':'TT'}
res=dic.pop('55','内容')
print(res)#如果pop删除没有的键,报错
# dic.popitem()#3.6版本默认删除最后一个,3.5又是随机删除 # print(dic)
# 改
# dic={'33':'jj','44':'TT'} #
dic1={'55':'PP','66':'gg'} #
dic2={'33':'JJ','44':'tt',} #
dic.update(dic1)#dic中没有dic1中的数据,直接添加
# print(dic) # dic.update(dic2)#dic中存在dic2的数据,直接覆盖
# print(dic) # dic['33']='你好'
#直接通过键去改 # print(dic)
#
查
dic={'33':'jj','44':'TT'}
# print(dic['33'])
#直接通过键去查
# print(dic.get('33'))
#get(存在的键 )去查
# print(dic.get('3'))
#get(不存在的键)去查返回None
# print(dic.get('2','提示的内容'))
#查不存在的键,返回的是提示的内容
字典的其他操作
# dic={'33':'jj','44':'TT'} # for i in dic: #遍历字典的键 # print(i) # print(dic.keys())#结果 dict_keys(['33', '44']),高仿列表 # for i in dic.keys():#遍历字典的键 # print(i) # print(dic.values())#dict_values(['jj', 'TT']) 高仿列表,不能使用下标 # for i in dic.values():#遍历列表的值 # print(i) # for i in dic.items():#结果('33', 'jj') # # ('44', 'TT') # print(i) # # 利用解构 # for k,v in dic.items():#结果#33 jj # # 44 TT # print(k,v) # 解构 # a,b,c=1,2,3 # print(a,b,c)#结果 1 2 3 # a,b,c='你好啊' # print(a,b,c)#结果 你 好 啊 # a,b,c='hsh' # print(a,b,c)#h s h # a,b,c=['u','v',[1,2,3]]#结果u v [1, 2, 3] # print(a,b,c) # a,b,c={1:'q',2:'w',3:'e'}#结果:1 2 3返回的是对应键 # print(a,b,c) # a,b,c={1,2,3}#set()结果 1 2 3 # print(a,b,c) # a,b,c=(7,8,9)#元组 结果7 8 9 # print(a,b,c) # 总结: # 后边跟的是可迭代的数据类型,int,bool不行
# dic=dict.fromkeys([1,2,3,4],'好还有')
# print(dic)
# dic[2]=2#不可变数据类型,就是可以改的
# print(dic)
dic=dict.fromkeys([1,2,3,4],[1,2,3])
dic[2].append(9)
print(dic)#****特别注意,以改都得改,内存机制
总结:
dict.fromkeys(第一个是可迭代对象,第二个值无所谓)
但是值如果是可变数据类型,要特别注意
字典的嵌套
# 字典的嵌套 dic={1:'a', 2:'b', 3:{'a':'你好','b':'Hello'} } print(dic[3]['a'])
集合
集合里面必须是可哈希数据类型(int,bool,str,tuple)
#集合----天然去重,和列表有点像,但是无序,不可用下标,用的{} # se={1,3,4,1,5,6} # print(se)#{1, 3, 4, 5, 6}
集合的增删改查
# se={1,3,2,2,'l','你好'} # print(se)#{1, 2, 3, 'l', '你好'} # 增 # se={1,3,2,2,'l','你好'} # se.add('hello')#增加 # print(se)#{'你好', 1, 2, 3, 'hello', 'l'} # 删 se={1,3,2,2,'l','你好'} # se.clear() # print(se)#清空列表 打印结果:set() # se.pop()#随机删除 # print(se) # se.remove('你好')#按照内容删除,remove # print(se) # # se={1,3,2,2,'l','你好'} # # se.update('abc')#{1, 2, 3, '你好', 'a', 'l', 'b'} # # print(se) # update(可迭代对象)
改
先删再加
查 # for 循环
集合的其他操作
se={1,3,2,2,'l','你好'} se1={'你好',1,2} #交集 # print(se&se1)#{1, 2, '你好'} # #并集 # print(se|se1)#{1, 2, 3, 'l', '你好'} # 差集 # print(se-se1)#{'l', 3}
反差及
se={1,3,2,2,'l','你好'}
se1={'你好',1,2}
print(se^se1)#{3, 'l'}
# 子集 # print(se1<se)#返回True #超超集 # print(se>se1)#True
冻结集合
# se={1,2,3,1,2,3,4} # s1=frozenset(se) # print(se) # print(s1)#frozenset({1, 2, 3, 4}) 集合是可变数据类型,不可哈希 冻结集合是不可变数据类型,可哈希