我正在使用openstack阴影库来管理我们的openstack堆栈。一项任务是列出用户拥有的所有堆栈(例如,然后允许删除它们)。
阴影库调用list_stacks()
返回一个munch.Munch对象的列表,基本上,我想确定该堆栈对象的“ id”或“ name”与某些用户提供的输入相匹配。
我在这里想出了这段代码:
def __find_stack(self, connection, stack_info):
stacks = connection.list_stacks()
for stack in stacks:
if stack_info in stack.values():
return stack
return None
但是感觉笨拙,我想知道是否有更惯用的方式在python中解决这个问题? (stack_info
是一个简单的字符串,即“名称”或“ id”,换句话说:它可能与被压缩的堆栈对象的“ dict”值中的该条目或该条目匹配)
答案 0 :(得分:1)
正如我的评论所暗示的,我真的认为没有什么可以改善的地方。
但是,从性能角度来看,您可以使用filter
将循环推到C级别,如果有很多stacks
,这可能是有益的。
从可读性角度来看,我认为您不会收获很多。
def __find_stack(self, connection, stack_info):
stacks = connection.list_stacks()
return list(filter(lambda stack: stack_info in stack.values(), stacks))
但是这种方法不是“短路的”。您的原始代码会在找到匹配项时停止,而不会,因此从理论上讲,如果存在匹配项,您将得到多个匹配项(如果没有匹配项,则为空列表)。