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
相关产品推荐
相关产品推荐

