![](/img/trans.png)
[英]How to compare sublist of list with sublist of other list that are in same list of lists
[英]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_set
和listb_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.