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

时间:2013-04-24 07:49:36

标签: python python-3.x

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

1 个答案:

答案 0 :(得分:3)

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

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

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

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

或者您可以使用filter() function

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

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

all(value == 'some test string' for key, value in vars(ob))