簡體   English   中英

比較列表/子列表

[英]Compare list w/ sublist

我有2個清單:

lista = ['1.2.3.4', '2.3.4.5', '3.4.5.6'] # 12,000 IP's
listb = [['1.2.3.4', 'info', 'moreinfo', 'moremoreinfo'], ['2.3.4.5', 'info', 'moreinfo', 'moremoreinfo']] # 1.8m IP's + info

我正在尋找一種獲取lista的方法,如果ip在listb中存在,請給我所有有關它的信息。

我已經嘗試過循環,但是它的速度非常慢:

for listaitem in lista:
    for listbitem in listb:
        if listaitem in listbitem[0]:
            print listbitem

關於如何加快速度的任何建議?

您可以將lista變成一組以進行快速成員資格測試,然后循環遍歷listb以選擇在lista中找到的任何一個:

lista_set = set(lista)
for item in listb:
    if item[0] in lista_set:
        print item

下一步是將listb變成字典:

listb_dict = {item[0]: item[1:] for item in listb}

現在,您可以使用集合來選擇lista_setlistb_dict

for match in listb_dict.viewkeys() & lista_set:
    print match, listb_dict[match]
lista = ['1.2.3.4', '2.3.4.5', '3.4.5.6']
listb = [['1.2.3.4', 'info', 'moreinfo', 'moremoreinfo'],
         ['2.3.4.5', 'info', 'moreinfo', 'moremoreinfo']]

listb變成字典

dictb = {i[0] : i[1:] for i in listb}

遍歷lista並在dictb查找條目

for elem in lista:
    print dictb.get(elem)

['info', 'moreinfo', 'moremoreinfo']
['info', 'moreinfo', 'moremoreinfo']
None

您應該將數據轉換為更適合搜索的格式:字典。

ip_info = {info[0]: info[1:] for info in listb}

然后,您可以非常快速地查找有關特定IP的信息。

for ip in lista:
    if ip in ip_info:
        print(ip_info[ip])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM