如何更新列表中所有dataclass对象的属性?
问题解决方法
首先,你遇到的expected parameter错误,是因为Python的lambda函数只能包含表达式,而f.active=True是赋值语句,不属于表达式范畴,所以语法不允许这么写。
下面给你两种内联实现的方案,不需要定义独立函数:
方案1:修改原对象的属性(会改变原列表中的Feature实例)
如果允许修改原features列表里的对象属性,可以用map结合一个小技巧,把赋值操作包装成表达式:
active_features = list(map(lambda f: (setattr(f, 'active', True), f)[1], features))
这里setattr(f, 'active', True)会修改对象的active属性(返回None),然后通过元组取第二个元素f,最终map会返回修改后的对象列表。
或者用更直观的写法:
active_features = [f for f in features] for f in active_features: f.active = True
虽然多了一行循环,但可读性更强。
方案2:创建新的Feature实例(不影响原列表)
如果你不想修改原features里的对象,而是生成全新的实例,用列表推导式或map都可以:
# 列表推导式(推荐,可读性更好) active_features = [Feature(f.name, True) for f in features] # 或者用map结合lambda active_features = list(map(lambda f: Feature(f.name, True), features))
这种方式会生成新的Feature对象,原列表里的对象状态不会被改变。
内容的提问来源于stack exchange,提问作者KZiovas
相关产品推荐
相关产品推荐

