Python 3附加到字典的列表值

时间:2015-10-17 22:50:36

标签: python list dictionary append

{{1}}

我在这里尝试做的是创建一个字典,其中KEY是IP地址,值是每个IP地址尝试连接的端口列表。我觉得这应该很简单,但我很难绕过这个?

My Regex很好,破坏的部分是makerPort函数,我希望函数能够获取一个ip,一个端口和一个字典。如果ip是一个密钥,它会检查字典,如果是,则将端口添加到端口列表中。如果IP还不是密钥,则将ip添加为密钥,将端口添加为列表中的值

1 个答案:

答案 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]}