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附加到字典的列表值的主要内容,如果未能解决你的问题,请参考以下文章

Python:将 a 附加到字典中的列表

将值附加到字典中的一个列表 将值附加到字典中的所有列表

在每次迭代期间将新值附加到列表中后,将列表值添加到字典中

为字典中的一个键附加多个值[重复]

嵌套字典。合并公共键并将值附加到列表中。 0 值未附加。里面的代码

附加到 Python 字典中的列表 [重复]