字典类型及特性特性: key-value结构 key必须可以hash、且必须为不可变数据类型,必须唯一 可存放任意多个值,可修改,可以不唯一 无序 查找速度快
#key必须可以哈希和速度快的解释:把key变成hash(数字)以后,数字可以排序、所以查找速度就快(白话)
#白话:
hash('stu01')
-2875070554392104707 #假如等于1
hash('stu02')
-4687980460504601688 #假如等于2
hash('stu03')
1735539261905286590 #假如等于3
hash('stu04')
1815936476197346206 #假如等于4
#假如有100万条数据、如果排序以后,找是key:stu03,(3)、那么直需要找2的1次方=2,从2开始找第2次就找到了3
#以此类推、假如100万条数据,那么直需要找2的20次方、也就是20次就找到了
#说明:只是一个比喻,key的查询方法并非如此!!!
>>> info = { #定义一个字典
... 'stu01':["lin",'UI',123,'男'],
... 'stu02':["yao",'AI',456,'女'],
... 'stu03':["hong",'pi',789,'男'],
... }
>>> info['stu01'] #查询字典里的key
['lin', 'UI', 123, '男']
>>> info['stu01'][0] ##查询字典里的列表
'lin'
>>> info['stu01'][0] = 'linlinlin ' #修改字典里的列表
>>> info #查看修改后的结果
{'stu01': ['linlinlin ', 'UI', 123, '男'], 'stu03': ['hong', 'pi', 789, '男'], 'stu02': ['yao', 'AI', 456, '女']}
>>> info['stu01']
['linlinlin ', 'UI', 123, '男'] #查看修改后的结果
字典类型的详细使用方法
>>> info
{'stu01': ['linlinlin ', 'UI', 123, '男'], 'stu03': ['hong', 'pi', 789, '男'], 'stu02': ['yao', 'AI', 456, '女']}
>>> info.keys() #查看字典里所有的key
dict_keys(['stu01', 'stu03', 'stu02'])
>>> info.values() #查看字典里所有key的值
dict_values([['linlinlin ', 'UI', 123, '男'], ['hong', 'pi', 789, '男'], ['yao', 'AI', 456, '女']])
>>> info.items() #把字典以一个大列表显示
dict_items([('stu01', ['linlinlin ', 'UI', 123, '男']), ('stu03', ['hong', 'pi', 789, '男']), ('stu02', ['yao', 'AI', 456, '女'])])
#----------------新增------------------------------------------------
>>> info['stu04'] = 'xinzeng' #新增一个stu04
>>> info
>>> info #查看已经增加进去
{'stu01': ['linlinlin ', 'UI', 123, '男'], 'stu04': 'xinzeng', 'stu03': ['hong', 'pi', 789, '男'], 'stu02': ['yao', 'AI', 456, '女']}
#---------------修改--------------------------------------------
>>> info['stu04'] = ['wo','AA',33,'女'] #修改stu04
>>> info #查看已经修改
{'stu01': ['linlinlin ', 'UI', 123, '男'], 'stu04': ['wo', 'AA', 33, '女'], 'stu03': ['hong', 'pi', 789, '男'], 'stu02': ['yao', 'AI', 456, '女']}
#---------------查询---------------------------------------------
>>> 'stu01' in info #标准用法、只是确认是否有stu01这个key
True
>>> 'stu05' in info #标准用法、只是确认是否有stu05这个key
False
>>> info.get('stu02') #get查询stu01这个key
['yao', 'AI', 456, '女']
>>> info.get('stu05') #get查询一个key不存在的时候,交互的时候没有输出
>>> print(info.get(stu05)) #打印一下查看输出的为None
>>> print(info.get('stu05'))
None
---------------------获取一个key的其他方法,不过这种方如果key不存在的话会报错------------------
>>> info['stu04']
['wo', 'AA', 33, '女']
>>> info['stu05']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'stu05'
查询key是否在字典里 info = { 'stu01':["lin",'UI',123,'男'], 'stu02':["yao",'AI',456,'女'], 'stu03':["hong",'pi',789,'男'], }if 'stu01' in info: print('stu01 is OK') else: print('no0') if 'stu01' not in info: print('stu01 is OK') else: print('NO')D:\python\python.exe "F:/运维笔记/python/字典类型/课时50 字典类型的详细方法.py" stu01 is OK NO
删除
#---------------删除----------------------------------------
>>> info.pop('stu03') #pop删除一个值、并且打印出来删除的值,如果值不存在,则报错
['hong', 'pi', 789, '男']
>>> info #查看已经被删除了
{'stu01': ['linlinlin ', 'UI', 123, '男'], 'stu04': ['wo', 'AA', 33, '女'], 'stu02': ['yao', 'AI', 456, '女']}
#增加几个key
>>> info[1]=2
>>> info[2]=4
>>> info[3]=6
>>> info[5]=7
>>> info
{1: 2, 2: 4, 3: 6, 5: 7, 'stu01': ['linlinlin ', 'UI', 123, '男'], 'stu04': ['wo', 'AA', 33, '女'], 'stu02': ['yao', 'AI', 456, '女']}
>>> info.popitem() #popitem、随机删除一个key
(1, 2)
>>> info.clear() #清空字典
>>> info
{}
#删除的另外一种方法
>>> info
{'stu01': ['lin', 'UI', 123, '男'], 'stu03': ['hong', 'pi', 789, '男'], 'stu02': ['yao', 'AI', 456, '女']}
>>> del info['stu01'] #del删除key
>>> info
{'stu03': ['hong', 'pi', 789, '男'], 'stu02': ['yao', 'AI', 456, '女']}
>>> del info['stu01'] #key不存在删除报错
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'stu01'
update
>>> info
{'stu01': ['linlinlin ', 'UI', 123, '男'], 'stu03': ['hong', 'pi', 789, '男'], 'stu02': ['yao', 'AI', 456, '女']}
>>> dic
{'stu01': ['lin', 'HAHA'], 'stu04': 'HEIHEI'}
>>> info.update(dic) #当info和dic都有一个stu01的key时候、会吧info的key里的内容覆盖、覆盖掉
>>> info #查看原来info里stu01的key的内容已经被替换成了dic的了
{'stu01': ['lin', 'HAHA'], 'stu04': 'HEIHEI', 'stu03': ['hong', 'pi', 789, '男'], 'stu02': ['yao', 'AI', 456, '女']}
setdefault用法(有点像合并)
>>> info
{'stu01': ['lin', 'HAHA'], 'stu04': 'HEIHEI', 'stu03': ['hong', 'pi', 789, '男'], 'stu02': ['yao', 'AI', 456, '女']}
>>> info.setdefault('stu01',['ding','AA','44']) #如果字典本身就存在key:stu01则返回stu01的值
['lin', 'HAHA']
>>> info.setdefault('test',['ding','AA','44']) #如果字典里没有key:test,则创建一个叫test的kye并且赋值['ding','AA','44']
['ding', 'AA', '44']
>>> info
{'stu01': ['lin', 'HAHA'], 'stu04': 'HEIHEI', 'test': ['ding', 'AA', '44'], 'stu03': ['hong', 'pi', 789, '男'], 'stu02': ['yao', 'AI', 456, '女']}
fromkeys用法:生成一个新的key
>>> info
{'stu01': ['lin', 'HAHA'], 'stu04': 'HEIHEI', 'test': ['ding', 'AA', '44'], 'stu03': ['hong', 'pi', 789, '男'], 'stu02': ['yao', 'AI', 456, '女']}
>>> info.fromkeys(['A','B','C']) #生成一个key,但是原key不变
{'A': None, 'C': None, 'B': None}
>>> info.fromkeys(['A','B','C'],'lin') #生成一个key,并且赋值
{'A': 'lin', 'C': 'lin', 'B': 'lin'}
>>> names = info.fromkeys(['A','B','C']) #验证:把结果赋值给names
>>> names #查看names
{'A': None, 'C': None, 'B': None}
>>> names.keys()
dict_keys(['A', 'C', 'B'])
循环一个字典里的key和key内容
info = { 'stu01':["lin",'UI',123,'男'], 'stu02':["yao",'AI',456,'女'], 'stu03':["hong",'pi',789,'男'], 'stu04':'I love you' } for k in info: print(k,info[k]) #打印ket和内容 print('------------------') for k in info: print(k) #打印keyD:\python\python.exe F:/运维笔记/python/字典类型/课时49字典类型及特性.py stu01 ['lin', 'UI', 123, '男'] stu02 ['yao', 'AI', 456, '女'] stu03 ['hong', 'pi', 789, '男'] stu04 I love you ------------------ stu01 stu02 stu03 stu04
多级字典嵌套
字典可以多级嵌套