插入python列表。检查条目是否仍然存在

时间:2016-06-29 05:14:53

标签: python

我有很多相同的网址,包括和没有' www'。 我的csv文件看起来像这样:

www.first.com
first.com
www.second.com
second.com
www.third.eu
third.eu
forth.tr
fifth.com
...`

我遍历列表,获取IP地址并将它们插入到dict中。 如何删除(或插入前检查)重复(带www)条目?

我的预期结果是:

[{'entry': ['first.com', '192.168.31.101'},
 {'entry': ['second.com', '192.168.31.102'},
 {'entry': ['third.eu', '192.168.31.103'},
 {'entry': ['forth.tr', '192.168.31.104'},
 {'entry': ['fifth.com', '192.168.31.105'}]


with open('myfile.csv', 'rb') as csvfile:
    reader = csv.reader(csvfile, delimiter=' ')
    result = []

    for row in reader:
        addr = socket.gethostbyname(row[0])
        result.append({'entry':[row[0], addr]})

6 个答案:

答案 0 :(得分:3)

使用一个集合来确定以前是否还没有看到过IP地址。如果地址未知,请将其添加到集合并存储记录。

并删除'www。'如果你想存储基本网址,请从网址中获取。

Action<>

答案 1 :(得分:1)

如果有的话,首先要删除'www'。然后你可以使用“如果在dict中的地址:”检查它是否在字典中。那就是:

with open('myfile.csv', 'rb') as csvfile:
    reader = csv.reader(csvfile, delimiter=' ')
    result = []

    for row in reader:
        addr = socket.gethostbyname(row[0])
        if addr[:4] == "www.":
            addr = addr[4:]
        add = True
        for item in result.values():
            if addr == item[0]:
                add = False
                break
        if add:
            result.append({'entry':[row[0], addr]})

答案 2 :(得分:0)

您可以通过

测试字典中是否包含它
url = url.replace("www.","")
url = url.replace("http://","")
url = url.split("/")[0]
if url in my_dict:
    pass
else:
    my_dict[url] = ip_address

答案 3 :(得分:0)

为什么你有一个包含单个项目的词典列表?为什么不用一本字典呢?前两个条目看起来像这样:

url_dict = {'first.com':'192.168.31.101', 'second.com':'192.168.31.102'}

如果您想检查包含www的网址是否已存在于dict中:

if url[:4] == 'www.':
    if url[4:] in url_dict.keys():
        continue

答案 4 :(得分:0)

使用列表推导:(内部循环将每次外部迭代迭代一次以替换&#39; www&#39;)

 with open('myfile.csv', 'rb') as csvfile:
       reader = csv.reader(csvfile, delimiter=' ')
       result = {h: socket.gethostbyname(h) for w in reader (w.replace('www.', '') for w in h) if result and h not in result.keys()}

答案 5 :(得分:0)

有没有理由让所有这些&#39;进入&#39;键?

拥有这样的字典更合理:

entry = {'url': 'ip'}

然后你的代码可能是:

import csv
import socket

with open('myfile.csv', 'r') as csvfile:
    reader = csv.reader(csvfile, delimiter=' ')
    entry = {}

    for row in reader:
        for url in row:
            addr = socket.gethostbyname(url)
            url = url.replace('www.', '')  # get rid of www.
            if not(url in entry):  # if key is not already in dict
                entry[url] = addr

你的输入词典就像:

{'google.com': '173.194.122.240', 'youtube.com': '173.194.73.190'}