如何从嵌套列表中按 IP 地址提取端口
How to extract ports by IP address from nested lists
我想按 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 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 = [
[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]]