我有一个对象数组(它们都是相同的对象类型)并且它们具有多个属性,有没有办法返回一个较小的对象数组,其中所有属性都匹配一个测试用例,字符串,无论该属性类型是什么。
问问题
2151 次
1 回答
5
使用列表推导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)]
或者,如果您的输入列表很大,并且您只需要一个一个地访问匹配的元素,请使用生成器表达式:
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()
功能:
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
您可以使用函数list_of_attributes
测试所有属性,而不是使用预定义的;这假定所有实例属性都需要测试:vars()
all(value == 'some test string' for key, value in vars(ob))
于 2013-04-24T07:51:20.530 回答