我想知道从相同类型的对象列表中获取属性的最佳方法是什么。有没有比 for 循环更有效的解决方案?我尝试使用 getattr 但无法使用列表。
只是为了说清楚。假设我定义了一个 Foo 类,其属性为 Bar
class Foo():
def __init__(self, Bar):
self.bar = Bar
A = Foo(5)
B = Foo(6)
C = [A,B]
我可以做些什么来同时为整个列表获取属性 Bar
以便最终结果将是一个值为 [5,6] 的列表吗?
感谢您的帮助
最佳答案
你可以使用列表组件:
C = [obj.Bar for obj in (A, B)]
或者:
from operator import attrgetter
C = map(attrgetter('Bar'), (A, B))
注意:它不是严格意义上的“同时”,而是一个接一个地遍历对象是最好的。另请注意,对象甚至不需要是同一类型 - 它们只需要具有属性 Bar
。如果属性不存在,您可以使用 getattr
返回默认值:
C = [getattr(obj, 'Bar', None) for obj in (A, B)]
或者,如果您想丢弃没有该属性而不是默认值的项目:
C = [obj.Bar for obj in (A, B) if hasattr(obj, 'Bar')]
关于Python:以最有效的方式从相同类型的对象列表中获取属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17366874/