Python字典列表字段追加元素(不存在则创建)的更优实现方案
Pythonic的实现方案
以下是几种更简洁的实现方式,按常用程度排序:
- 方案1:使用字典内置的
setdefault方法(最通用,无需导入额外模块)setdefault会自动判断键是否存在:如果不存在,先将键的值设置为你传入的默认值,最后返回该键对应的值,所以可以直接链式调用append,一行代码即可实现需求:
userdata.setdefault('dependencies', []).append('foo')
这个方案适用于仅需偶尔对字典的个别列表类型键执行追加操作的场景,不需要修改原字典的类型。
- 方案2:使用
collections.defaultdict(适合大量同类操作的场景)
如果你确定整个字典的所有值都是列表类型,且会频繁执行追加操作,可以直接将字典初始化为defaultdict类型:
from collections import defaultdict # 初始化时指定所有默认值为空列表 userdata = defaultdict(list) # 后续不需要判断键是否存在,直接append即可 userdata['dependencies'].append('foo')
这个方案的优势是多次追加操作都不需要额外写判断逻辑,代码更简洁,但注意如果从其他地方拿到的已经是普通字典类型,需要先转成defaultdict才能用。
- 方案3:Python 3.8+ 海象运算符写法(可读性较低,不优先推荐)
如果你使用3.8以上版本,也可以用赋值表达式实现,但可读性不如前两种,仅做参考:
(userdata['dependencies'] if 'dependencies' in userdata else (userdata['dependencies'] := [])).append('foo')
注意:以上所有方案都默认该键对应的值一定是列表类型或者不存在,如果键存在但值不是列表,调用
append会抛出类型错误,和你原来的if-else逻辑行为一致。
内容的提问来源于stack exchange,提问作者user3240688
相关产品推荐
相关产品推荐

