检查对象数组中的多个属性匹配

Dou*_*tle 1 python python-3.x

我有一个对象数组(它们都是相同的对象类型),并且它们有多个属性,有没有办法返回一个较小的对象数组,其中所有属性都与测试用例、字符串匹配,无论该属性类型是什么。

Mar*_*ers 6

使用列表理解all(); 以下假设list_of_attributes已预定义 a 来枚举您要测试的属性:

sublist = [ob for ob in larger_list if all(getattr(ob, attr) == 'some test string' for attr in list_of_attributes)]
Run Code Online (Sandbox Code Playgroud)

或者,如果您的输入列表很大,并且您只需要逐一访问匹配元素,请使用生成器表达式:

filtered = (ob for ob in larger_list if all(getattr(ob, attr) == 'some test string' for attr in list_of_attributes))
for match in filtered:
    # do something with match
Run Code Online (Sandbox Code Playgroud)

或者您可以使用该filter()功能

filtered = filter(lambda ob: all(getattr(ob, attr) == 'some test string' for attr in list_of_attributes)
for match in filtered:
    # do something with match
Run Code Online (Sandbox Code Playgroud)

您可以使用该函数list_of_attributes测试所有属性,而不是使用预定义的属性;这假设所有实例属性都需要测试:vars()

all(value == 'some test string' for key, value in vars(ob))
Run Code Online (Sandbox Code Playgroud)