我正在编写一个收集指标的python脚本,我有:
collected
,包含所有消息的列表,存储为字典denied_metrics
, 一个包含所有已编译正则表达式的列表
我希望能够禁止转发那些collected[i]['service']
匹配至少一个正则表达式的消息denied_metrics
。
我试图使用列表理解和来实现我的目标filter
,但我没有设法做到这一点。
实际解决方案
鉴于消息具有以下结构:
msg = {
'service': 'foo',
'metric': 1.0,
'denied': False
}
实际上我正在过滤所有collected
消息,如下所示
def filter_denied( denied_metrics, collected ):
for pattern in denied_metrics:
for msg in collected
if pattern.match( msg['service'] ):
msg['denied'] = True
return [ msg for msg in collected if msg['denied'] is not True ]
问题
是否有一种(更好的?)方法来获取允许的消息列表,仅使用列表理解和filter
or的组合reduce
?
编辑
我不知道像@eyquem 在他的回答中建议的那样解决问题的可能性。