Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3追加到字典的列表值_Python_List_Dictionary_Append - Fatal编程技术网

Python 3追加到字典的列表值

Python 3追加到字典的列表值,python,list,dictionary,append,Python,List,Dictionary,Append,我在这里要做的是制作一个字典,其中键是IP地址,值是每个IP地址试图连接到的端口的列表。我觉得这应该是非常简单的,但我有一个困难的时候,围绕着这个包我的头 我的正则表达式很好,坏掉的部分是makerPort函数,我希望该函数包含一个ip、一个端口和一个字典。然后,它会检查字典中的ip是否是密钥,如果是,则会将端口添加到端口列表中。如果IP还不是密钥,它会将IP添加为密钥,将端口添加为列表中的值您的代码几乎正确,您只需从端口[src][0]中删除[0]。原因是端口dict中的键值都是整数列表,表示

我在这里要做的是制作一个字典,其中键是IP地址,值是每个IP地址试图连接到的端口的列表。我觉得这应该是非常简单的,但我有一个困难的时候,围绕着这个包我的头


我的正则表达式很好,坏掉的部分是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]}