Skip to main content
 首页 » 编程设计

Python:以最有效的方式从相同类型的对象列表中获取属性

2025年05月04日13傻小

我想知道从相同类型的对象列表中获取属性的最佳方法是什么。有没有比 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')]