Python 以元组和元组计数为值的字典
Python dictionary with a tuple and tuple count as the value
我有一个 .csv
文件:
csv file
包含来自 wireshark 扫描的数据包 header 数据,我正在使用 for 循环逐行迭代。该列表包含大约 100,000 个项目,其中许多是重复的。我试图找出每个目标 IP 地址在从 1 到 1024 的每个端口上使用 TCP 协议 (6) 被访问的次数。本质上,我正在尝试创建如下所示的内容:
{ip address: {(protocol:port):count}}
我会知道 protocol/port 的组合尝试使用 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 地址列出了多次端口元组。我怎样才能得到它,以便显示元组后跟它在每个字典条目中出现的次数?
目前,行 dst[pkt.ipdst].append(tup)
告诉 python
,获取与 IP 地址关联的值,然后将元组附加到它。在这种情况下,这意味着您要将元组附加到与 IP 地址关联的字典中。这就是您看到每个 IP 地址列出多个元组的原因。
要解决此问题,只需将您的行更改为 dst[pkt.ipdst][tup] += 1
。这告诉 python
获取与 IP 地址关联的字典,获取与该字典中的元组关联的计数,然后加 1。打印时,这应该按预期显示。
此外,将 dst
定义为 defaultdict(lambda:defaultdict(dict))
,以便在协议、端口组合尚未尝试的情况下,它不会抛出 KeyError
。
我有一个 .csv
文件:
csv file
包含来自 wireshark 扫描的数据包 header 数据,我正在使用 for 循环逐行迭代。该列表包含大约 100,000 个项目,其中许多是重复的。我试图找出每个目标 IP 地址在从 1 到 1024 的每个端口上使用 TCP 协议 (6) 被访问的次数。本质上,我正在尝试创建如下所示的内容:
{ip address: {(protocol:port):count}}
我会知道 protocol/port 的组合尝试使用 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 地址列出了多次端口元组。我怎样才能得到它,以便显示元组后跟它在每个字典条目中出现的次数?
目前,行 dst[pkt.ipdst].append(tup)
告诉 python
,获取与 IP 地址关联的值,然后将元组附加到它。在这种情况下,这意味着您要将元组附加到与 IP 地址关联的字典中。这就是您看到每个 IP 地址列出多个元组的原因。
要解决此问题,只需将您的行更改为 dst[pkt.ipdst][tup] += 1
。这告诉 python
获取与 IP 地址关联的字典,获取与该字典中的元组关联的计数,然后加 1。打印时,这应该按预期显示。
此外,将 dst
定义为 defaultdict(lambda:defaultdict(dict))
,以便在协议、端口组合尚未尝试的情况下,它不会抛出 KeyError
。