符合munch.munch对象列表的惯用方式?

时间:2018-12-17 11:54:03

标签: python openstack-shade

我正在使用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”值中的该条目或该条目匹配)

1 个答案:

答案 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))

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