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(['小明', '小刚', '小红']) <class '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}

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案