从零开始的Linux运维屌丝之路,资源免费分享平台   运维人员首选:简单、易用、高效、安全、稳定、社区活跃的开源软件
  • 首页
  • Python
  • 14、Python数据类型-字典类型及特性

14、Python数据类型-字典类型及特性

发布:蔺要红04-10分类: Python

字典类型及特性特性:

    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)  #打印key
D:\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

多级字典嵌套
      字典可以多级嵌套

 
温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,如有侵权我会在24小时之内删除!

欢迎使用手机扫描访问本站