python字典方法介绍
方法
功能作用
clear()
删除字典内所有的元素
copy()
返回字典的浅复制
fromkeys()
以指定key创建一个新的字典
get()
返回指定key的值
items()
成对返回所有key和value
keys()
返回字典所有的key
values
返回字典所有value
setdefault()
为key设置对应的默认值
update()
更新字典
pop()
删除键值对
字典内置的方法可以帮我们实现很多功能,下面逐个介绍他们,讲解他们的用途
1. clear, 删除字典内所有的元素
dic = {
'小明': 98
}
dic.clear()
print(dic)
使用clear方法后,字典dic变成了空字典,有人可能会问,这种清空字典的方法和直接将空字典赋值给变量dic有什么区别
dic = {
'小明': 98
}
dic = {}
print(dic)
程序最终输出的结果同样是{},dic 变成了空字典。两种方式,变量dic都变成了空字典,但意义不同,使用clear方法,字典在内存中的地址没有发生变化,但是第二种方法,变量dic指向了一个新的空字典,原来的字典被垃圾回收机制回收了,我们可以通过输出变量的内存地址来验证
dic1 = {
'小明': 98
}
print("使用clear方法前,dic1内存地址为", id(dic1))
dic1.clear()
print(dic1)
print("使用clear方法后,dic1内存地址为", id(dic1))
print("\n\n分割线"+"*"*30 + "\n"*2)
dic2 = {
'小明': 98
}
print("赋值空字典之前,dic1内存地址为", id(dic2))
dic2 = {}
print(dic2)
print("赋值空字典之后,dic1内存地址为", id(dic2))
程序输出结果为
使用clear方法前,dic1内存地址为 4352796640
{}
使用clear方法后,dic1内存地址为 4352796640
分割线******************************
赋值空字典之前,dic1内存地址为 4729716312
{}
赋值空字典之后,dic1内存地址为 4729716168
clear是清空字典,而将一个空字典赋值给变量,并不是清空,只是修改了变量的引用而已。
2. copy, 返回字典的浅复制
dic1 = {
'小明': 98
}
dic2 = dic1.copy()
print(dic1)
print(dic2)
程序输出结果为
{'小明': 98}
{'小明': 98}
dic2是dic1的复制品,他们的内容一模一样,在python中,还有一个模块,可是实现数据的复制功能,它就是copy模块
import copy
dic1 = {
'小明': 98
}
dic2 = copy.copy(dic1)
print(dic1)
print(dic2)
这两段代码都实现了浅复制,浅复制是一种危险的复制,建议你不要使用,因为这种复制并没有创建新的对象,因此,你对dic2的修改会影响到dic1
dic1 = {
'stu': ['小明', '小红']
}
dic2 = dic1.copy()
dic2['stu'].append('小刚')
print(dic1)
程序输出结果为
{'stu': ['小明', '小红', '小刚']}
关于对象的深拷贝和浅拷贝,会有专门的章节进行讲解
3. fromkeys,以指定key创建一个新的字典
stu_dict = dict.fromkeys(['小明', '小刚'], 90)
print(stu_dict)
程序输出结果为
{'小明': 90, '小刚': 90}
fromkeys方法接受两个参数,第一个参数是序列,可以是列表,也可以是元组,方法将以这个序列里的元素做key,生成新的字典。value由第二个参数来决定,我在代码里传入参数90,所有key所对应的value就都是90,如果不传这个参数,默认value为None
4. get,返回指定key的值
get方法,是一种安全的获取value的方法,如果key不存在,则返回default,default可以由你来指定,如果你不指定,则默认为None
empty_dict = {}
print(empty_dict.get('python'))
print(empty_dict.get('python', 100))
程序输出结果
None
100
5. items(),成对返回所有key和value
items()方法通常被用在字典遍历的场景下
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
for key, value in score_dict.items():
print(key, value)
items()方法返回一个可迭代对象,使用for循环遍历这个可迭代对象时,得到的是一个元组,元组内包含key和 value
下面的代码向你揭示items()方法返回的对象的本质面目
from collections import Iterable
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
iter_obj = score_dict.items()
print(isinstance(iter_obj, Iterable))
for item in iter_obj:
print(item)
程序输出结果为
True
('小明', 96)
('小刚', 98)
('小红', 94)
6. keys,返回字典所有的key
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
keys = score_dict.keys()
print(keys, type(keys))
for key in keys:
print(key)
程序输出结果
dict_keys(['小明', '小刚', '小红'])
小明
小刚
小红
keys()方法在py2.7里,返回的是包含了所有key的列表,但在py3.6中,返回的是可迭代对象,遍历这个对象,就可以得到字典所有的key
7. values,返回字典所有value
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
values = score_dict.values()
print(values, type(values))
for value in values:
print(value)
values()方法返回的是一个可迭代对象,遍历这个可迭代对象,可以获得字典所有的value
8. setdefault,为key设置对应的默认值
这个方法和get有些类似,如果key不存在,则增加新的键值对,如果key已经存在,则不做任何操作
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
score_dict.setdefault('小明', 100) # 小明这个key已经存在,因此这行语句不产生任何影响
score_dict.setdefault('小丽', 97) # 小丽这个key不存在,增加新的键值对,key为小丽,value为97
print(score_dict)
程序输出结果
{'小明': 96, '小刚': 98, '小红': 94, '小丽': 97}
9. update 更新字典
一般的使用模式是dic1.update(dic2),将dic2的内容更新到dic1中
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
score_dict2 = {
'小明': 100,
'小丽': 98,
}
score_dict.update(score_dict2)
print(score_dict)
如果一个key,在两个字典中都存在,则value的最终结果取决于dic2
10. pop 删除键值对
不论是使用del 还是使用pop方法删除字典里的键值对,如果key不存在都会引发KeyError异常,pop与del的不同之处在于,pop会返回所删除键值对的value
score_dict = {
'小明': 96,
'小刚': 98,
'小红': 94
}
del score_dict['小红']
print(score_dict.pop('小明'))
print(score_dict)
程序输出结果
96
{'小刚': 98}