class Reasoner: def __init__(self, rules): self.rules = rules def evaluate(self, entries): return [r['action'] for r in self.rules if self._check(r['condition'], entries)] def _check(self, cond, entries): if cond.startswith('count'): # e.g. count(type=anomaly)>3 p = cond.replace('count(', '').split(')') key, val = p[0].split('=') count = sum(1 for e in entries if e.get(key) == val) return eval(f"{count}{p[1]}") return False