def groupJournalByPathAndState(events): """ Creates a summary list of dicts with displayPath, eventState, and occurrence count. Returns list sorted by displayPath (alphabetical), then by eventState. """ if not events: return [] groups = {} # outer: source → {eventState: count} for event in events: es = event.get('eventState') source = event.get('source') # Get or create inner dict inner = groups.setdefault(source, {}) # Increment count (inner.setdefault would also work, but +1 is clearer) inner[es] = inner.get(es, 0) + 1 # Build flat list of result dictionaries result = [] for source in sorted(groups.keys()): # sort displayPath alphabetically for es in sorted(groups[source].keys()): # sort eventState within each path result.append([source, es, groups[source][es]]) return system.dataset.toDataSet(["source", "eventState", "count"], result)