1

我正在使用 openstack shade 库来管理我们的 openstack 堆栈。一项任务是列出用户拥有的所有堆栈(例如,然后允许删除它们)。

阴影库调用list_stacks()返回munch.Munch对象的列表,基本上我想识别具有与某些用户提供的输入匹配的“id”或“名称”的堆栈对象。

我在这里想出了这段代码:

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”值中的这个或那个条目)

4

1 回答 1

2

正如我的评论所暗示的,我真的不认为有什么需要改进的地方。

但是,在性能方面,您可以使用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))

然而,这种方法不是“短路的”。您的原始代码在找到匹配项时停止,而这个不会,因此理论上如果存在匹配项,您将获得多个匹配项(如果没有匹配项,则为空列表)。

于 2018-12-17T12:12:31.427 回答