字典的优点是速度快,好取值。list和元组是按序搜索,字典是一种k-v形式,按key搜索取值。
字典没有顺序,输入输出都不一定是正确顺序。每次打印出来顺序都不一样,输入时也不用按顺序
字典用大括号定义,如下:
xiaojun = {
'name':'xiaojun',
'sex':'男',
'shengao':'185',
'age':18,
'email':'acb@qq.com',
'addr':'火星',
'id':1
}
一、增:
1)直接赋值:
hailong['zhuzhi'] = '北京' #如果原来有值就覆盖,原来没有就是新增
hailong['age']=30
print(hailong)
2)setdefault():
d['name']='xiaojun' #定义一个d,直接给name赋值
d.setdefault('name','wangcan') #如果这个key已经存在,那么就不修改它的值了
二、删
1)Pop()
hailong.pop('age') #删除指定项
print('删除age',hailong)
2)Popitem()
hailong.popitem()#随机删除
print(hailong)
3)del
del hailong['age']#删除字典的一部分。
print(hailong)
注:字典的k-v是成双成对出现的,不能只删“小军”留“name”。
三、改
1)重新赋值
stus['name'] = '海龙'
2)Update()
name = {'zhuzhi':"北京"}
hailong.update(name)
print(hailong)
或
stus.update({'moeny':1000})
print(stus)
四、查
1)直接取值查询
print(hailong['name'])#查询一个不存在的内容会报错。
2)get()
print(hailong.get('addr','火星'))#get查找-不报错,可以设置默认值。如果有就返回一个值,没有就返回none
3) values()
print(hailong.values())#打印hailing的全部value
4) keys()
print(hailong.keys())#打印hailong的全部key
5) items()
print(hailong.items())#打印hailong的全部键值对
五、循环:
for i in hailong:
print(i)#打印hailong的key
for i in hailong:
print(i) #搜索hailong的key
if i=='name': #从搜索到key中找到name
print(hailong[i])#打印hailong的name
for k,v in hailong.items():
print(k,v)
六、嵌套多层取值
all_stus = {
'xiaojun':
{
'sex': '男',
'shengao': '185',
'age': 18,
'email': 'acb@qq.com',
'addr': '火星',
'id': 1,
'cars':['牧马人','911','野马','劳斯莱斯']
#五菱宏光
},
'hailong':{
'sex': '男',
'shengao': '185',
'age': 18,
'email': 'acb@qq.com',
'addr': '火星',
'id': 2
},
'yangfan':{
'sex': '男',
'shengao': '185',
'age': 18,
'email': 'acb@qq.com',
'addr': '火星',
'id': 3,
'bags':{
'qianbao':['lv','ysl'],
'beibao':['coach','abc']
}
}
}
#内容太多时,可字典嵌套字典。name作为key
#xiaojun的车加一个五菱宏光
all_stus['xiaojun']['cars'].append('五菱宏光')
print(all_stus)
#查看xiaojun一共多少辆车
print(len(all_stus["xiaojun"]["cars"]))
#把yangfan的性别改成女
all_stus['yangfan']['sex']='女'
print(all_stus)
#yangfan去掉一个lv钱包
all_stus['yangfan']['bags']['qianbao'].remove('lv')
print(all_stus)