Python 3附加到字典的列表值
Posted
技术标签:
【中文标题】Python 3附加到字典的列表值【英文标题】:Python 3 Appending to a list value of dictionary 【发布时间】:2016-01-16 12:01:13 【问题描述】: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)
我在这里要做的是制作一个字典,其中 KEY 是 IP 地址,值是每个 IP 地址尝试连接的端口列表。我觉得这应该很简单,但我很难理解这个?
我的正则表达式一切正常,损坏的部分是 makerPort 函数,我希望该函数获取一个 ip、一个端口和一个字典。如果 ip 是一个键,它会检查字典,如果是,它会将端口添加到端口列表中。如果 IP 还不是键,则将 ip 添加为键,将端口添加为列表中的值
【问题讨论】:
从else
语句看来,您的字典的格式好像是 d = ip1: [port11, port12], ip2: [port21, port22, port23]。如果是这样,您的if
语句很奇怪,因为您试图将append
转换为一个数字(port[src][0]
是一个数字,而不是一个列表)。
【参考方案1】:
您的代码几乎是正确的,您只需从ports[src][0]
中删除[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]
【讨论】:
以上是关于Python 3附加到字典的列表值的主要内容,如果未能解决你的问题,请参考以下文章