获取列表,比较值,使用多个键创建字典

时间:2018-03-17 16:50:13

标签: python list dictionary

我正在尝试获取具有IP地址和端口号的列表,并将数据打印为格式127.0.0.1:21,80,443。以下是虚拟数据的示例。

127.0.0.1
80
127.0.0.1
443
192.168.1.1
21
192.168.1.2
22
192.168.1.2
3389
192.168.1.2
5900

我希望这些数据如上所述输出。现在,我有一个列表中的数据,我希望将端口与IP地址关联,因此它不会重复每个端口的IP地址。此数据应输出到:

127.0.0.1:80,443
192.168.1.1:21
192.168.1.2:22,3389,5900

3 个答案:

答案 0 :(得分:2)

使用defaultdict,您可以收集每个地址的端口,并一次打印出来,如:

from collections import defaultdict
address_to_ports = defaultdict(list)
with open('file1') as f:
    for address in f:
        address_to_ports[address.strip()].append(next(f).strip())

print(address_to_ports)

print(['{}:{}'.format(a, ','.join(p)) for a, p in address_to_ports.items()])

结果:

defaultdict(<class 'list'>, {'127.0.0.1': ['80', '443'], '192.168.1.1': ['21'], '192.168.1.2': ['22', '3389', '5900']})

['127.0.0.1:80,443', '192.168.1.1:21', '192.168.1.2:22,3389,5900']

答案 1 :(得分:0)

您可以使用格式 - 而不是仅打印列表中的每个元素,执行以下操作:

print "{0} : {1}".format(list[0], list[1])

但您还没有指定输入内容。你应该在下次添加它。

答案 2 :(得分:0)

我们假设您的列表位于名为&#39; ip_list.txt&#39;的文件中。 代码

f = open("ip_list.txt","r")
count = 2
dict_of_ip = {}
ip = ''
for i in f:
    if count%2 == 0:
        if i.strip() not in dict_of_ip.keys():
            ip = i.strip()
            dict_of_ip[ip] = []
    else:
        dict_of_ip[ip].append(i.strip())
    count = count + 1
print(dict_of_ip)

输出:

{'192.168.1.1': ['21'], '127.0.0.1': ['80', '443']}