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

Python推导式中如何为to_dict返回的字典新增属性且不修改原方法

所有解决方案均满足不修改原有to_dict方法的要求:


问题原因

你写的代码返回全None的核心原因是:Python的dict.update()方法属于原地修改操作,不会返回修改后的字典对象,默认返回值为None,因此最终列表里所有元素都是None。


解决方案

1. Python 3.9+ 字典合并运算符(最简洁)

Python 3.9引入了|运算符用于字典合并,会生成新的合并后字典,不影响原有字典对象,直接写在列表推导式里即可:

dict_users = {"users": [user.to_dict() | {"id": user.id} for user in ls_users]}

2. Python 3.5+ 字典解包写法(兼容性更好)

如果你的运行环境是Python 3.5到3.8版本,可以用字典解包语法生成新字典:

dict_users = {"users": [{**user.to_dict(), "id": user.id} for user in ls_users]}

3. 兼容低版本Python的写法

如果需要兼容Python 3.5之前的版本,可以通过分步循环构造:

users_list = []
for user in ls_users:
    user_dict = user.to_dict()
    user_dict["id"] = user.id
    users_list.append(user_dict)
dict_users = {"users": users_list}

运行效果

以上任意一种写法运行后,打印dict_users都会得到预期结果:

{'users': [{'name': 'Jane', 'age': 32, 'id': 1}, {'name': 'John', 'age': 29, 'id': 2}, {'name': 'Robert', 'age': 45, 'id': 3}]}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:06:03