如何高效比对defaultdict(list)中各设备存储的IP地址重合情况
高效实现方案
核心思路
利用集合O(1)的成员查询特性 + 反向索引映射,避免嵌套循环的冗余计算,整体时间复杂度控制在O(总IP数)级别,完全适配你当前的数据规模。
具体实现步骤
- 第一步:数据预处理,把每个设备的IP列表转成集合(顺便完成同设备IP去重),同时构建「IP地址 → 持有该IP的设备集合」的全局反向索引,仅需遍历所有IP一次即可完成构建。
- 第二步:遍历每个设备的IP,直接查询反向索引即可快速拿到所有包含该IP的其他设备,无需逐个遍历其余设备的IP列表校验。
代码示例
from collections import defaultdict # 假设你的原始数据为 device_ip_list = defaultdict(list) def check_duplicate_ips(device_ip_list): # 1. 构建IP反向索引 ip_to_devices = defaultdict(set) device_ip_set = {} for dev, ips in device_ip_list.items(): # 转集合去重 ip_set = set(ips) device_ip_set[dev] = ip_set for ip in ip_set: ip_to_devices[ip].add(dev) # 2. 校验结果存储:结构为 {设备名: {重复IP: [持有该IP的其他设备列表]}} result = defaultdict(lambda: defaultdict(list)) for dev, ip_set in device_ip_set.items(): for ip in ip_set: # 排除当前设备本身 other_devs = [d for d in ip_to_devices[ip] if d != dev] if other_devs: result[dev][ip] = other_devs return result
效率说明
你当前的总IP量为 140 * 2000 = 28万条,上述方案总操作量仅为50万次左右,Python环境下执行耗时不到0.1秒,完全满足高性能要求。如果后续设备量、IP量继续上涨,该方案的性能也远优于两两设备对比的嵌套循环方案。
内容的提问来源于stack exchange,提问作者ReverseEngineer
相关产品推荐
相关产品推荐

