如何将包含两条操作语句的for循环改写为Python单行内联for循环
可行方案
可以直接通过字典解包覆盖指定键的方式实现单行改写,兼容性较好,无需依赖高版本Python特性:
results = [{**item.__dict__, "myprop": item.__dict__["myprop"].__dict__} for item in response.items]
这个写法输出的results和原代码完全一致:先把item.__dict__的所有键值对展开到新字典中,再显式将myprop字段替换为对应实例的__dict__属性。注意这个写法会生成新的字典对象,不会修改原item实例的属性。
如果你使用的是Python 3.8及以上版本,且需要保留原item实例的属性修改,可以用海象运算符实现:
results = [(d := item.__dict__, d.update({"myprop": d["myprop"].__dict__}), d)[2] for item in response.items]
这个写法利用Python元组按顺序执行、最终取最后一位元素的特性,完成字典修改后直接返回目标对象作为列表元素,会直接修改原item实例的属性,和原代码的副作用完全一致。
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

