{{1}}
我在这里尝试做的是创建一个字典,其中KEY是IP地址,值是每个IP地址尝试连接的端口列表。我觉得这应该很简单,但我很难绕过这个?
My Regex很好,破坏的部分是makerPort函数,我希望函数能够获取一个ip,一个端口和一个字典。如果ip是一个密钥,它会检查字典,如果是,则将端口添加到端口列表中。如果IP还不是密钥,则将ip添加为密钥,将端口添加为列表中的值
答案 0 :(得分:1)
您的代码几乎是正确的,您只需从[0]
删除ports[src][0]
即可。原因是ports
dict中的键值是表示每个ip(dict的键)连接到的端口的整数列表。
因此,通过执行port["127.0.0.1"]
之类的操作来选择特定的端口值会为您提供类似[80, 8080]
的列表。通过执行port["127.0.0.1"][0]
,您将选择该列表的第一项,在本例中为80
。因此,通过执行port["127.0.0.1"][0]
,您实际上会调用80.append()
,这会导致代码失败,因为append()是一个列表方法。
工作版本看起来像这样:
>>> 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]}