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

使用字典推导式为字典内列表追加元素为何返回None?

问题原因与解决办法

你遇到的问题核心在于:list.append()是原地修改列表的方法,它的返回值是None。

你写的字典推导式里,每个键对应的值是sample_dict[el].append(3)的执行结果,也就是None,所以最终得到的字典所有value都是None。

正确的实现方式

方式1:原地修改原字典(无需推导式)

如果目标是直接修改原字典里的列表,直接用循环遍历即可,这是最直观的做法:

sample_dict = {'foo':[1], 'bar': [2]}
for key in sample_dict:
    sample_dict[key].append(3)

执行后原字典就会变成你期望的:{'foo': [1,3], 'bar': [2,3]}

方式2:生成新字典(不修改原字典)

如果想保留原字典,生成包含更新后列表的新字典,需要用返回新列表的操作(比如列表拼接),而非原地修改的方法:

sample_dict = {'foo':[1], 'bar': [2]}
new_dict = {key: sample_dict[key] + [3] for key in sample_dict}

这里sample_dict[key] + [3]会返回一个新列表,所以新字典的value就是更新后的列表,原字典不会被改动。

也可以先拷贝原列表再追加元素:

new_dict = {key: sample_dict[key].copy() for key in sample_dict}
for key in new_dict:
    new_dict[key].append(3)

关键要点总结

  • 区分原地修改方法(返回None)和返回新对象的操作:像append()、sort()这类原地修改的方法,执行后不会返回修改后的对象,而是返回None;而+、sorted()这类操作会返回新的对象。
  • 字典推导式的核心是生成新字典,若只是要修改原字典里的元素,直接用循环比推导式更合适。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 15:50:16