字典和字符串、列表是比较常用的数据类型,当记录一个学生的学习信息的时候,使用列表和字符串就不太方便了,很难取到一个具体的元素的值,这个时候使用字典就比较方便了,字典的方法也有许多,需要记住具体的使用格式。
1.字典的定义
使用{}里面的元素是一个Key对应一个Value,并且每一个元素需要用逗号隔开
info = {
'name':'xiaoming',
'sex':'nan',
'age':20,
'id':1,
}
2.查询字典value的值
1)通过中括号进行取值
格式为变量名[key]
info = {
'name':'xiaoming',
'sex':'nan',
'age':20,
'id':1,
}
print(info['name'])
输出结果:
xiaoming
注意:字典中的key是不可以重复的
2) 通过Get取值
格式为变量名.get(key)
info = {
'name':'xiaoming',
'sex':'nan',
'age':20,
'id':1,
}
print(info.get('name'))
print(info.get('add',"没有找到"))
输出结果:
Xiaoming
没有找到
注意:用中括号取值和get方法取值的区别 ,get方法获取不到key的时候,不会报错,中括号取值找不到key会报错,get方法还可以多传一个参数,如果get不到key的话,那么返回上传的参数,如果不写的话,默认get不到返回None
3.新增字典中的key和value
1) 使用中括号新增
格式:变量名[key]=value
info = {
'name':'xiaoming',
'sex':'nan',
'age':20,
'id':1,
}
info['addr']='河南'
print(info)
输出结果:
{'age': 20, 'name': 'xiaoming', 'id': 1, 'addr': '河南', 'sex': 'nan'}
2) 使用setdefault方法新增
格式:变量名. Setdefault(key,value)
info = {
'name':'xiaoming',
'sex':'nan',
'age':20,
'id':1,
}
info.setdefault('addr','河南')
print(info)
输出结果:
{'age': 20, 'addr': '河南', 'sex': 'nan', 'id': 1, 'name': 'xiaoming'}
4.修改字典中的value
格式:变量名[key]=value
info = {
'name':'xiaoming',
'sex':'nan',
'age':20,
'id':1,
}
info['name']='MLing'
print(info)
输出结果:
{'sex': 'nan', 'id': 1, 'name': 'MLing', 'age': 20}
注意:修改只有这一种方法,在有这个key的情况下那就是修改这个key的value,没有这个key的话,就是新增
5.删除字典中的元素
1) del方法
格式:del 变量名[key]
info = {
'name':'xiaoming',
'sex':'nan',
'age':20,
'id':1,
}
del info['name']
print(info)
输出结果:
{'sex': 'nan', 'age': 20, 'id': 1}
注意:传出的key要是存在的,不然会报错的
2) pop方法删除
info = {
'name':'xiaoming',
'sex':'nan',
'age':20,
'id':1,
}
info.pop('name') #删除key以及它对应的value
print (info.pop('sex')) #pop方法可以返回删除的value
print(info)
输出结果:
nan
{'age': 20, 'id': 1}
注意:因为字典是无序的,所有需要传值,必须指定Key,且必须存在,不然会报错的,pop方法可以返回删除的key的value
3) popitem()随机删除一个元素
info = {
'name':'xiaoming',
'sex':'nan',
'age':20,
'id':1,
}
info.popitem()
print(info)
输出结果:
{'id': 1, 'sex': 'nan', 'age': 20}
注意:因为不确定删除的元素,所以这种方法会很少用
4) clear方法-清空所有内容
info = {
'name':'xiaoming',
'sex':'nan',
'age':20,
'id':1,
}
info.clear()
print(info)
输出结果:
{}
6.多层嵌套取值:
1)取'car'中的'yellow'
all = [ {
'car':
{
'color':['red','yellow','black'],
'moeny':1111111,
'pailiang':"2.5L",
'name':"BMW"
} ,
'car1':
{
'color':['red','yellow','black'],
'moeny':1111111,
'pailiang':"2.5L",
'country':"china"
},
'car2':
{
'color':['red','yellow','black'],
'moeny':1111111,
'pailiang':"2.5L"
}
}
]
bb=all[0].get('car').get('moeny') #使用get取值
aa=all[0]['car']['color'][1] #使用中括号取值,注意每个key需要有引号的
print(aa,bb)
7.常用方法
1) Keys方法获取字典中所有的key
all = {
'car':
{
'color':['red','yellow','black'],
'moeny':1111111,
'pailiang':"2.5L",
'name':"BMW"
} ,
'car1':
{
'color':['red','yellow','black'],
'moeny':1111111,
'pailiang':"2.5L",
'country':"china"
},
'car2':
{
'color':['red','yellow','black'],
'moeny':1111111,
'pailiang':"2.5L"
}
}
print(all.keys())
输出结果:
dict_keys(['car', 'car2', 'car1'])
2) values方法获取字典中所有的values
all
= {
'car':
{
'color':['red','yellow','black'],
'moeny':1111111,
'pailiang':"2.5L",
'name':"BMW"
} ,
'car1':
{
'color':['red','yellow','black'],
'moeny':1111111,
'pailiang':"2.5L",
'country':"china"
},
'car2':
{
'color':['red','yellow','black'],
'moeny':1111111,
'pailiang':"2.5L"
}
}
print(all.values())
输出结果:
dict_values([{'name': 'BMW', 'color': ['red', 'yellow', 'black'], 'pailiang': '2.5L', 'moeny': 1111111}, {'color': ['red', 'yellow', 'black'], 'pailiang': '2.5L', 'moeny': 1111111}, {'country': 'china', 'color': ['re
d', 'yellow', 'black'], 'pailiang': '2.5L', 'moeny': 1111111}])
3) items方法循环字典中的key和value
将字典中的数据,转换为一个列表,并将每个key和value放在一个元素中
info2 = {
'name':"hhh",
'sex':'nan'
}
print(info2.items())
返回结果:
dict_items([('name', 'hhh'), ('sex', 'nan')])
要取到key和value就需要对items方法返回的列表进行循环
info2 = {
'name':"hhh",
'sex':'nan'
}
for k ,v in info2.items():
print(k,v)
返回结果:
sex nan
name hhh
4) 直接循环字典进行取值
info2 = {
'name':"hhh",
'sex':'nan'
}
for k in info2:
print(k,info2[k])
返回结果:
sex nan
name hhh
因为items方法是需要先把字典转换为列表,之后在循环取里面的key和values,当数据量过大的时候,效率会比较低,由于字典循环的时候,是先循环的key,所以可以直接通过循环的key进行取value,这样效率会高很多
5) Update方法将把两个字典合并到一起,如果有一样的key,那么更新value
info1 = {
'name':"hhh",
'sex':'nan'
}
info2 = {
'name':"哈哈",
'sex':'女',
'addr':'河南'
}
info1.update(info2)
print(info1)
输出结果:
{'sex': '女', 'name': '哈哈', 'addr': '河南'}