python--字典

字典

字典是另一种可变容器模型,且可存储任意类型对象。

字典的每个键值(key=>value)对用冒号   :   分割;每个对之间用逗号    ,   分割,整个字典包括在花括号{   }中 ,格式如下所示:

d = {key1 : value1, key2 : value2 }
键必须是唯一的,但值则不必。

值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。

dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
print(dict)  #打印为{'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}
dict1 = { '爱好': ['吃','喝'] }  #可为列表
print(dict1)   #打印为{'爱好': ['吃', '喝']}
dict2 = { 'abc': (123, 98.637) }   #可为字符
print(dict2)   #打印为{'abc': (123, 98.637)}

通过key进行操作   :  增    删    改   查

增     改:

dict = {'Name': 'Jack', 'Age': 7, 'Class': 'First'}
dict['Name'] = '小明'     #如果字典里面存在,则直接进行覆盖(修改)   没有则抛异常
print(dict)      #打印为{'Name': '小明', 'Age': 7, 'Class': 'First'}
dict['走起来']='嗨嗨嗨'   #如果原字典里面没有 则直接添加到末尾
print(dict)     #打印为{'Name': '小明', 'Age': 7, 'Class': 'First', '走起来': '嗨嗨嗨'}
删 :

1.del  删除   如果值存在就直接删   不存在报异常

del dict['Name']   #  存在直接删除   没有则报异常
print(dict)   #打印为 {'Age': 7, 'Class': 'First'}

2.pop()  函数  删除    返回值被删除的值  不存在报异常   ;

          如果在pop(  ,   ) 逗号后面接默认值, key的值不存在也不抛异常  直接打印默认值

dict = {'Name': 'Jack', 'Age': 7, 'Class': 'First'}
ret=dict.pop('Class')   #如果存在 删除后,返回的删除的值   不存在报异常
print(ret)    #打印为  First
ret=dict.pop('boss','不存在')
print(ret)      #打印为  不存在

3.popitem()   随机返回并删除字典中的一对键和值(一般删除末尾对) ; 

          如果字典已经为空,却调用了此方法,就报出KeyError异常

citys={
    '北京':{
        '丰台':['角门西','天坛'],
        '朝阳':['三里屯','国贸'],
        '海淀':['中关村','公主坟']
    },
    '山西':{
        '太原':['迎泽区','小店区'],
        '忻州':['五台山','芦芽山'],
        '大同':['九龙壁','云冈石窟']
    }
}
pop=citys.popitem()
print(pop)
#打印为('山西', {'太原': ['迎泽区', '小店区'],
#                '忻州': ['五台山', '芦芽山'], '大同': ['九龙壁', '云冈石窟']})

查  :    建议使用get() 函数查找

1.get()  --> 函数     get(  key ,   默认值)     存在直接打印   不存在返回默认值(None) 默认值可随意修改

dict = {'Name': 'Jack', 'Age': 7, 'Class': 'First'}
print(dict.get('Alice'))      # 不存在  打印默认值    None
print(dict.get('Alice','不存在'))   #不支持 打印默认值(不存在)
print(dict.get('Name'))      # 存在直接打印 Jack

2.通过key的值查询

dict = {'Name': 'Jack', 'Age': 7, 'Class': 'First'}
print(dict['Name'])  #通过key的值查询  存在直接打印   打印为Jack
print(dict['Boss'])  #通过key的值查询     不存在 抛异常
字典遍历:

1.keys() 方法以列表返回一个字典所有的键。

2.values() 方法以列表返回字典中的所有值。

3. items() 方法以列表返回可遍历的(键, 值) 元组数组。

phones={'110':'警察','120':'急救','119':'火警'}
for key in phones.keys():   
    print(key)   #打印为110  120 119
for value in phones.values():
    print(value)  #打印为  警察 急救 火警
for item in phones.items():
    print(item[0],item[1])  #打印为   110 警察   120 急救  119 火警

字典键的特性:

1. 不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住

dict = {'Name': 'Runoob', 'Age': 7, 'Name': '小菜鸟'}
print ("dict['Name']: ", dict['Name'])  #打印结果为 dict['Name']:  小菜鸟

2 .键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行

和list比较,dict有以下几个特点: 

查找和插入的速度极快,不会随着key的增加而变慢;

需要占用大量的内存,内存浪费多。

而list相反:

查找和插入的时间随着元素的增加而增加;

占用空间小,浪费内存很少


字典支持无限值嵌套 :

citys={
    '北京':{
        '丰台':['角门西','天坛'],
        '朝阳':['三里屯','国贸'],
        '海淀':['中关村','公主坟']
    },
    '山西':{
        '太原':['迎泽区','小店区'],
        '忻州':['五台山','芦芽山'],
        '大同':['九龙壁','云冈石窟']
    }
}
for city in citys.keys():
    print(city)
    for qu in citys.get(city).keys():
        print('\t'+qu)
        print('\t\t'+str(citys.get(city).get(qu)))
#最后打印结果为
#北京
#	丰台
#		['角门西', '天坛']
#	朝阳
#		['三里屯', '国贸']
#	海淀
#		['中关村', '公主坟']
#山西
#	太原
#		['迎泽区', '小店区']
#	忻州
#		['五台山', '芦芽山']
#	大同
#		['九龙壁', '云冈石窟']
字典内置函数&方法

len()      str()            type()         clear()         copy()     keys()    

values()items()     pop(key) 如没有key 抛异常

get("key","default") 


clear()   清除      返回值为None

copy()  复制 

phones={'110':'警察','120':'急救','119':'火警'}
cop = phones.copy()
print(cop)  #打印为    {'110':'警察','120':'急救','119':'火警'}
print(phones.clear())  #打印为:  none







猜你喜欢

转载自blog.csdn.net/hao_python/article/details/80241091