from statistics import mean def merge_ssid_summaries(summary_lists): merged = {} for summary in summary_lists: for entry in summary: ssid = entry['SSID'] key = ssid # You could also key on both SSID + BSSID set if you're feeling spicy if key not in merged: merged[key] = { 'SSID': ssid, 'Hidden': entry['Hidden'], 'Open': entry['Open'], 'BSSID_Count': entry['BSSID_Count'], 'BSSIDs': set(entry['BSSIDs'].split(";")), 'Avg_Signal': [entry['Avg_Signal']], 'Max_Signal': entry['Max_Signal'], 'Min_Signal': entry['Min_Signal'], 'Clients_Seen': entry['Clients_Seen'], 'PacketCount': entry['PacketCount'] } else: merged[key]['Hidden'] = merged[key]['Hidden'] or entry['Hidden'] merged[key]['Open'] = merged[key]['Open'] and entry['Open'] merged[key]['BSSIDs'].update(entry['BSSIDs'].split(";")) merged[key]['Avg_Signal'].append(entry['Avg_Signal']) merged[key]['Max_Signal'] = max(merged[key]['Max_Signal'], entry['Max_Signal']) merged[key]['Min_Signal'] = min(merged[key]['Min_Signal'], entry['Min_Signal']) merged[key]['Clients_Seen'] += entry['Clients_Seen'] merged[key]['PacketCount'] += entry['PacketCount'] final_list = [] for ssid, data in merged.items(): final_list.append({ 'SSID': data['SSID'], 'Hidden': data['Hidden'], 'Open': data['Open'], 'BSSID_Count': len(data['BSSIDs']), 'BSSIDs': ";".join(sorted(data['BSSIDs'])), 'Avg_Signal': round(mean(data['Avg_Signal']), 2), 'Max_Signal': data['Max_Signal'], 'Min_Signal': data['Min_Signal'], 'Clients_Seen': data['Clients_Seen'], 'PacketCount': data['PacketCount'] }) return final_list