You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效比对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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 03:06:01