私はメトリックを収集する python スクリプトを書いています。
collected
、辞書として保存されたすべてのメッセージを含むリストdenied_metrics
、コンパイルされたすべての正規表現を含むリスト
collected[i]['service']
の少なくとも 1 つの正規表現に一致するメッセージの転送を禁止できるようにしたいと考えています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
reduce
編集
@eyquemが彼の回答で提案したように、問題にアプローチする可能性については知りませんでした。