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

列表推导式更新字典为何返回None?求正确实现方法

为什么会得到[None, None, None]?

因为dict.update()方法是原地修改字典,它的返回值固定为None。你写的列表推导式里,{**m}先创建了原字典的浅拷贝,紧接着调用.update({"b":5}),但推导式会把这个方法的返回值(也就是None)作为新列表的元素,最终自然得到全是None的列表。

正确实现方法

有几种不同的思路,可根据需求选择:

1. 生成新字典(不修改原字典)

直接用字典解包合并的方式,在生成新字典时覆盖b的值:

d = [{"a":1, "b":2},{"a":3, "b":4},{"a":5, "b":6}]
d = [{**m, "b":5} for m in d]
# 结果:[{"a":1, "b":5},{"a":3, "b":5},{"a":5, "b":5}]

这种方式会创建全新的字典,原字典不会被改动。

2. 原地修改原字典(节省内存)

如果不需要保留原来的字典内容,可以直接遍历列表修改每个字典的b值:

d = [{"a":1, "b":2},{"a":3, "b":4},{"a":5, "b":6}]
for m in d:
    m["b"] = 5
# 此时d就是预期结果,不需要重新赋值

这种方式没有创建新字典,直接修改原列表里的字典对象,内存占用更小。

3. 用dict()构造器生成新字典

和第一种思路类似,利用dict()的特性传入原字典和要覆盖的键值:

d = [{"a":1, "b":2},{"a":3, "b":4},{"a":5, "b":6}]
d = [dict(m, b=5) for m in d]
# 同样得到预期结果

内容的提问来源于stack exchange,提问作者Honza S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 06:02:35