字典
字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(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', '走起来': '嗨嗨嗨'}
删 :
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