Bit*_*ket 2 python search dictionary
样本数据:
{
10116079620: {'ip.dst': ['10.1.1.5'], 'ip.src': ['1.2.3.4'], 'category': ['Misc']},
10116882439: {'ip.dst': ['1.2.3.4'], 'ip.src': ['10.1.1.5'], 'category': ['Misc']},
10116080136: {'ip.dst': ['10.10.10.99'], 'ip.src': ['1.2.3.4'], 'category': ['Misc']},
10116884490: {'ip.dst': ['10.10.10.99'], 'ip.src': ['2.3.4.5'], 'alias': ['www.example.com'], 'category': ['Misc']},
10117039635: {'ip.dst': ['2.3.4.5'], 'ip.src': ['10.11.11.50'], 'alias': ['google.com'], 'category': ['Misc']},
10118099993: {'ip.dst': ['1.2.3.4'], 'ip.src': ['10.11.11.49'], 'alias': ['www.google.com'], 'category': ['Misc']},
10118083243: {'ip.dst': ['10.11.11.49'], 'ip.src': ['4.3.2.1'], 'alias': ['www.google.com'], 'category': ['Misc']}}
}
Run Code Online (Sandbox Code Playgroud)
目标:
我的目标是使用已知存在的值(IP地址)搜索示例字典,尽管不知道它是否会出现在ip.dst或ip.src中.一旦找到,我想将"对面"(其他)IP地址写入新列表...如果在ip.src中找到搜索到的地址,我想捕获ip.dst,反之亦然.
可以多次找到搜索到的地址 - 结果列表不需要反映重复项.
如果搜索到1.2.3.4,则会捕获以下内容:
*10.1.1.5
*10.10.10.99
*10.11.11.49
搜索10.10.10.99将捕获:
*1.2.3.4
*2.3.4.5
我确信这很简单,但我遇到了令人讨厌的嵌套循环,需要一个比我的泥更清晰的简洁程序.
非常感谢您的协助.
谢谢.
步骤1.反转字典.
dst= collections.defaultdict( list )
src= collections.defaultdict( list )
for k in original:
for addr in original[k]['ip.dst']:
dst[addr].append( k )
for addr in original[k]['ip.src']:
src[addr].append( k )
Run Code Online (Sandbox Code Playgroud)
第2步.不要搜索,只需获取值.
您可以进行两次即时检查dst[addr]
,src[addr]
并且您知道原始字典中发生的所有密钥.
翻译字典需要时间.
首先构建更好的字典(即,通过ip.dst和ip.src索引)可以节省反转已有字典的成本.
归档时间: |
|
查看次数: |
684 次 |
最近记录: |