You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python列表推导式问题:添加字典键后结果变为None

为什么你的列表推导式会得到None?

嘿,这个问题我之前也踩过坑!核心问题出在dict.update()方法的返回值上——它是个原地修改的方法,只会直接改动原字典,不会返回修改后的字典,而是返回None。

你写的列表推导式[r.update({ 'new_key': 'new_value'}) for r in lod],其实是把每个update调用的返回值(也就是None)收集成了一个新列表,然后你把这个列表重新赋值给了lod,所以最后lod就变成了[None](如果原列表有多个元素,就是对应数量的None组成的列表),完全不是你期望的带新键的字典列表。

正确的两种做法

1. 原地修改原列表(最直接)

如果只是想给原列表里的字典添加新键,不需要生成新列表,直接用普通的for循环就行,别用列表推导式做这种副作用操作:

lod = [{'name': 'storm', 'age': 99}]
for r in lod:
    r.update({'new_key': 'new_value'})

执行完后,lod还是原来的列表,里面的字典已经多了new_key键。

2. 生成新的字典列表(保留原字典)

如果想保留原字典不变,生成一个包含新键的新字典列表,可以用字典解包的方式在列表推导式里创建新字典:

lod = [{'name': 'storm', 'age': 99}]
lod = [{**r, 'new_key': 'new_value'} for r in lod]

这里**r会把原字典的所有键值对展开,再加上新的键值对,生成一个全新的字典,列表推导式收集这些新字典,赋值给lod后就是你想要的结果。

另外提醒一句:列表推导式的设计初衷是生成新列表,不是用来执行原地修改这种副作用操作,以后遇到类似场景尽量避免哦~

内容的提问来源于stack exchange,提问作者Storm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:49:02