基础数据类型(三)

时间:2022-10-19 16:36:34
  • 字典
  • 字典的增删改查
  • 字典的其他方法
  • 字典的嵌套
  • 集合

字典——字典的读取速度要更快

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})

集合是可变数据类型,不可哈希
冻结集合是不可变数据类型,可哈希