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

问题描述 投票:0回答:1

我想从一个列表中按IP地址收集端口。

_list = [
    [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 list nested-lists
1个回答
1
投票

处理这个问题的最合理的方法是建立一个以地址为键,端口为值的列表的字典。您可以用普通的 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]]
© www.soinside.com 2019 - 2024. All rights reserved.