当前位置:首页>python>dict提供的内置函数|Python自学成才(番外篇6)

dict提供的内置函数|Python自学成才(番外篇6)

  • 2026-09-07 22:30:59
dict提供的内置函数|Python自学成才(番外篇6)

Python自学成才(番外篇6)|dict提供的内置函数

上一篇我们将了字典基础的增删改查操作,也提到了用一些字典的内置函数来实现相关操作。

但是 dict 的内置函数远不止如此,在遇到需要批量添加、合并、提取数据、条件判断等场景时,仍然有一些便捷的内置函数帮你快速实现。

keys / values 的提取

💡 注意:标题用的是 key 和 value 的复数形式,也就是说把所有的 key 和 value 提取出来。

获取所有的键:keys()

info = {"name": "RainBomb", "age": 18}print(info.keys())# Output: dict_keys(['name', 'age'])

💡 注意:返回值是 dict_keys,外表形似 list,但是却有本质的不同,如需进行如排序、下标取值等操作,需先使用强制类型转换为 list:

keys_list = list(info.keys())

获取所有的值:values()

info = {"name": "RainBomb", "age": 18}print(info.values())# Output: dict_values(['RainBomb', 18])

💡 注意:同样注意,返回的是 dict_values 为非 list。

获取所有的键值对:items()

在上一篇我们讲解创建 dict 的时候,就提到可以使用元组列表的形式。因此,在获取 dict 中的内容时,我们也可以使用键值对元组的形式进行提取:

info = {"name": "RainBomb", "age": 18}print(info.items())# Output: dict_items([('name', 'RainBomb'), ('age', 18)])for key, value in info.items():print(key, value)# Output: name RainBomb# Output: age 18

💡 注意:键值对二元元组遵从前 key 后 value 的原则。

新增、字典合并、批量赋值

非覆盖新增:setdefault()

前一篇我们讲到,可以使用中括号的形式新增键值对,当 key 存在时则新增操作变为更新覆盖 value 的操作。这在很多场景是不便利的,容易触发错误更新。

dict.setdefault(key, value) 则能避免这个错误,它会检测 dict 中是否已有 key,如果存在则不作修改,否则使用 key 和 value 新增:

info = {"name": "RainBomb", "age": 18}info.setdefault("gender", "male")print(info)# Output: {'name': 'RainBomb', 'age': 18, 'gender': 'male'}info.setdefault("age", 20)print(info)# Output: {'name': 'RainBomb', 'age': 18, 'gender': 'male'}

多个字典合并:update()

当要将多个字典合并时,可以使用内置的 update() 函数,以被合并字典作为调用者,带合并字典作为参数传递给该函数:

d1 = {"name": "RainBomb"}d2 = {"age": 18}d1.update(d2)print(d1)# Output: {'name': 'RainBomb', 'age': 18}

延续上例子:当 d2 中存在与 d1 中重复的 key 时,update 函数会将 d2 中对应的内容更新覆盖给 d1:

d1 = {"name": "RainBomb"}d2 = {"name": "Rain--Bomb", "age": 18}d1.update(d2)print(d1)# Output: {'name': 'Rain--Bomb', 'age': 18}

复制与初始化

使用 copy() 进行浅拷贝

先说说引用、浅拷贝和深拷贝的区别:

  • 引用是对某个变量起一个别名,就好比我们的昵称,由于其代表相同的内容,因此对内容的修改会直接体现在任意一个与之相关的变量名称上。
  • 浅拷贝只复制某个对象的地址,而不复制对象本身,新旧对象还是共享同一块内存,对原内容的修改会影响到拷贝内容。
  • 深拷贝则创建相同但不存储于同一内存的对象,对原内容的修改仅作用于原内容。

dict 提供的 copy() 是一种浅拷贝的操作,但是其深拷贝父对象(一级目录),子对象(二级目录)不拷贝还是引用,所以在使用时需要注意:

dict1 =  {'user': 'RainBomb', 'num':[1, 2, 3]}dict2 = dict1dict3 = dict1.copy()dict1['user']='root'dict1['num'].remove(1)print(dict1)# Output: {'user': 'root', 'num': [2, 3]}print(dict2)# Output: {'user': 'root', 'num': [2, 3]}print(dict3)# Output: {'user': 'RainBomb', 'num': [1, 2, 3]}

dict 的 copy() 有些不好理解,大家可以多用几个例子测试一下。

字典键值对批量生成

当给定 keys 序列时,如果我们要对所有 key 的 value 使用相同内容进行初始化,一种操作是:

key_list = ["name", "age", "gender"]info = {}for key in key_list:    info[key] = Noneprint(info)# Output: {'name': None, 'age': None, 'gender': None}

使用了 for 循环,显然不够满足 python 对优雅的要求。因此,我们可以用 fromkeys() 批量统一设置初始值:

key_list = ["name", "age", "gender"]info = dict.fromkeys(key_list, None)print(info)# Output: {'name': None, 'age': None, 'gender': None}

往期回顾:

Python的字符串驻留机制,内存优化产生的小心思

用OpenCV去除图像噪声增强细节 | Part.10

为什么程序员偏爱Dark Mode(深色模式)

dict的增删查改|Python自学成才(番外篇5)

用OpenCV来实现简单的人脸检测 | Part.9

最新文章

随机文章