Python 3追加到字典的列表值
我在这里要做的是制作一个字典,其中键是IP地址,值是每个IP地址试图连接到的端口的列表。我觉得这应该是非常简单的,但我有一个困难的时候,围绕着这个包我的头Python 3追加到字典的列表值,python,list,dictionary,append,Python,List,Dictionary,Append,我在这里要做的是制作一个字典,其中键是IP地址,值是每个IP地址试图连接到的端口的列表。我觉得这应该是非常简单的,但我有一个困难的时候,围绕着这个包我的头 我的正则表达式很好,坏掉的部分是makerPort函数,我希望该函数包含一个ip、一个端口和一个字典。然后,它会检查字典中的ip是否是密钥,如果是,则会将端口添加到端口列表中。如果IP还不是密钥,它会将IP添加为密钥,将端口添加为列表中的值您的代码几乎正确,您只需从端口[src][0]中删除[0]。原因是端口dict中的键值都是整数列表,表示
我的正则表达式很好,坏掉的部分是makerPort函数,我希望该函数包含一个ip、一个端口和一个字典。然后,它会检查字典中的ip是否是密钥,如果是,则会将端口添加到端口列表中。如果IP还不是密钥,它会将IP添加为密钥,将端口添加为列表中的值您的代码几乎正确,您只需从
端口[src][0]
中删除[0]
。原因是端口
dict中的键值都是整数列表,表示每个ip(dict的键)连接到的端口
同样地,通过执行类似于port[“127.0.0.1”]
的操作来选择端口的特定值会给您一个类似于[808080]
的列表。通过执行端口[“127.0.0.1”][0]
可以选择该列表的第一项,在本例中为80
。因此,通过执行端口[“127.0.0.1”][0]
您实际上是在调用80.append()
,这会导致代码失败,因为append()是一种列表方法
工作版本的外观如下所示:
import re
ports = {}
file = open("Asn1_TCPdump_format3.txt")
def makerPorts(src, port, ports):
if src in ports:
ports[src][0].append(port)
else:
ports[src] = [port]
return ports
for k, v in ports.items():
print(k, v)
从
else
语句看,您的字典的形式似乎是d={ip1:[port11,port12],ip2:[port21,port22,port23]}。如果是这样,那么您的If
语句很奇怪,因为您试图将附加到一个数字(port[src][0]
是一个数字,而不是列表)。
>>> ports = {}
>>> def makerPorts(src, port, ports):
... if src in ports:
... ports[src].append(port)
... else:
... ports[src] = [port]
...
... return ports
...
>>> makerPorts("1.0.0.1",80,ports)
>>> makerPorts("1.0.0.1",40,ports)
>>> makerPorts("1.0.0.2",40,ports)
>>> makerPorts("1.0.0.3",80,ports)
>>> makerPorts("1.0.0.3",40,ports)
>>> print( ports )
{'1.0.0.2': [40], '1.0.0.1': [80, 40], '1.0.0.3': [80, 40]}