Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.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 如何从嵌套列表中按IP地址提取端口_Python_List_Nested Lists - Fatal编程技术网

Python 如何从嵌套列表中按IP地址提取端口

Python 如何从嵌套列表中按IP地址提取端口,python,list,nested-lists,Python,List,Nested Lists,我想从列表中按IP地址收集端口: \u列表=[ [5,'255.255.255.0','dell','744-1'], [6,'255.255.255.0','dell','744-1'], [7,'255.255.255.1','amd','None'], [8,'255.255.255.1','amd','None'] ] 结果列表应采用以下格式: result_list=[[255.255.255.0',5,6],[255.255.255.1',7,8]] 解决这个问题最合理的方法是建立

我想从列表中按IP地址收集端口:

\u列表=[
[5,'255.255.255.0','dell','744-1'],
[6,'255.255.255.0','dell','744-1'],
[7,'255.255.255.1','amd','None'],
[8,'255.255.255.1','amd','None']
]
结果列表应采用以下格式:

result_list=[[255.255.255.0',5,6],[255.255.255.1',7,8]]

解决这个问题最合理的方法是建立一个字典,其中地址作为键,端口作为值列表。您可以使用普通的Python
dict
来实现这一点,但这正是
defaultdict
简化您的逻辑的场景,因为它会附加到一个列表中(如果一个键已经存在的话),或者将创建一个新的key:list对并将值添加到列表中,而无需您自己在代码中创建新的key:list对

from collections import defaultdict

d = defaultdict(list)
for port, address, _, _ in _list:
    d[address].append(port)

out_list = [[k] + v for k, v in d.items()]
上述代码的第一部分将收集
defaultdict
中的所有数据,其中包含地址作为键,端口作为值列表:

defaultdict(list, {'255.255.255.0': [5, 6], '255.255.255.1': [7, 8]})
如果你评估了你的需求,那么字典本身就有可能满足你的需求。但是,您可以使用列表理解将其重新格式化为您在问题中指定的列表:

[['255.255.255.0', 5, 6], ['255.255.255.1', 7, 8]]

到目前为止你试过什么?:)为每个Ip创建不同的列表,但是_list可能要大得多,所以这不是个好主意:)显示您编写的代码可能最好使用
dict
,将
Ip
作为键,其余作为值