Python字典推导式如何在同一表达式内添加额外自定义键值对
问题原因
你之前的写法不符合Python字典推导式的语法规范:标准字典推导式的结构为{键表达式: 值表达式 for 迭代变量 in 可迭代对象},不支持直接在for关键字前额外插入固定键值对。
实现方案
可以通过字典合并的方式,在单个表达式内完成需求,不同Python版本可选的实现方式如下:
方法1:Python 3.9+ 字典合并运算符(最简洁)
使用|运算符直接合并固定键值对字典和推导式生成的字典:
bar = {'foo': 'bar'} | {n: n**2 for n in range(1, 10)}
如果需要自定义键的优先级更高(避免被推导式中同名键覆盖),调整顺序即可:
bar = {n: n**2 for n in range(1, 10)} | {'foo': 'bar'}
方法2:Python 3.5+ 字典拆包语法
用**将推导式生成的字典拆包到字典字面量中,兼容3.5到3.8的Python版本:
bar = {'foo': 'bar', **{n: n**2 for n in range(1, 10)}}
同理需要自定义键优先级更高的话,把固定键值对放在拆包语句后面:
bar = {**{n: n**2 for n in range(1, 10)}, 'foo': 'bar'}
方法3:兼容Python 3.5以下版本
使用dict()构造函数拼接键值对列表实现:
bar = dict([('foo', 'bar')] + [(n, n**2) for n in range(1, 10)])
内容的提问来源于stack exchange,提问作者puchm
相关产品推荐
相关产品推荐

