匹配 munch.munch 对象列表的惯用方法?
Idiomatic way to to match against list of munch.munch objects?
我正在使用 openstack 阴影库来管理我们的 openstack 堆栈。一项任务是列出用户拥有的所有堆栈(例如,然后允许删除它们)。
阴影库调用 list_stacks()
returns 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
是一个简单的字符串,可以是 "name" 或 "id",换句话说:它可能与 munched 堆栈对象的 "dict" 值中的这个或那个条目匹配)
正如我的评论所暗示的,我真的认为没有什么可以改进的。
但是,在性能方面,您可以使用 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))
然而这种方法不是"short-circuited"。您的原始代码在找到匹配项时会停止,而这个不会,因此从理论上讲,如果它们存在,您将获得多个匹配项(如果没有匹配项,则为空列表)。
我正在使用 openstack 阴影库来管理我们的 openstack 堆栈。一项任务是列出用户拥有的所有堆栈(例如,然后允许删除它们)。
阴影库调用 list_stacks()
returns 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
是一个简单的字符串,可以是 "name" 或 "id",换句话说:它可能与 munched 堆栈对象的 "dict" 值中的这个或那个条目匹配)
正如我的评论所暗示的,我真的认为没有什么可以改进的。
但是,在性能方面,您可以使用 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))
然而这种方法不是"short-circuited"。您的原始代码在找到匹配项时会停止,而这个不会,因此从理论上讲,如果它们存在,您将获得多个匹配项(如果没有匹配项,则为空列表)。