以元组和元组计数为值的Python字典

时间:2018-08-06 07:34:16

标签: python tuples defaultdict

我有一个.csv文件: csv file 包含来自wireshark扫描的数据包头数据,我正在使用for循环逐行进行迭代。该列表包含约100,000个项目,其中许多重复。我正在尝试查找使用1至1024范围内的每个端口上的TCP协议(6)访问每个目标IP地址的次数。本质上,我正在尝试创建如下所示的内容:

{ip address: {(protocol:port):count}}

我将在哪里知道协议/端口组合尝试使用IP地址作为目的地的次数。到目前为止,我已经尝试过:

dst = defaultdict(list)
for pkt in csvfile:
   if(pkt.tcpdport > 0 and pkt.tcpdport < 1025):
       tup = (pkt.proto, pkt.tcpdport)
       dst[pkt.ipdst].append(tup)

当我尝试将其打印出来时,会获得带有协议的IP地址列表,每个IP地址多次列出端口元组。如何获得它以便显示元组,然后显示每个字典条目中出现该元组的次数?

1 个答案:

答案 0 :(得分:1)

当前,行throw告诉dst[pkt.ipdst].append(tup),获取与IP地址关联的值,然后将元组附加到该地址。在这种情况下,这意味着您要将元组附加到与IP地址关联的字典中。这就是为什么您看到每个IP地址列出多个元组的原因。

要解决此问题,只需将行更改为python。这是告诉dst[pkt.ipdst][tup] += 1获取与IP地址关联的字典,获取与该字典中的元组关联的计数,然后加1。打印时,它应按预期显示。

还要将python定义为dst,以便在未尝试协议,端口组合的情况下,也不会抛出defaultdict(lambda:defaultdict(dict))