与列表匹配的惯用方法咀嚼。咀嚼物体?

2024-06-16 08:54:42 发布

您现在位置:Python中文网/ 问答频道 /正文

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

shade库调用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

但这感觉很笨拙,我想知道是否有一种更惯用的方法来解决这个问题?(stack_info是一个简单的字符串,“name”或“id”,换句话说:它可能与munched stack对象的“dict”值中的这个或那个条目相匹配)


Tags: 对象用户nameininfoidreturnopenstack
1条回答
网友
1楼 · 发布于 2024-06-16 08:54:42

正如我的评论所说,我并不认为有什么需要改进的。你知道吗

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

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

相关问题 更多 >