Python搜索循环缓慢

Python搜索循环缓慢,python,search,Python,Search,我正在搜索一个广告列表(adscrape)。每个广告都是adscrape中的一个dict(例如下面的广告)。它搜索一个ID列表(数据库ID),长度可能在200000-1000000项之间。我想在adscrape中找到任何数据库中没有ID的广告 我现在的代码如下。扫描数据库ID需要很长时间,每个广告需要几秒钟。是否有一种更高效/更快的方法来运行此功能(查找大列表中的哪些项目,以及哪些项目在另一个大列表中) `您可以使用列表理解作为下面给出的代码基础。如上文所述,使用现有数据库的ID列表和ADSCR

我正在搜索一个广告列表(adscrape)。每个广告都是adscrape中的一个dict(例如下面的广告)。它搜索一个ID列表(数据库ID),长度可能在200000-1000000项之间。我想在adscrape中找到任何数据库中没有ID的广告

我现在的代码如下。扫描数据库ID需要很长时间,每个广告需要几秒钟。是否有一种更高效/更快的方法来运行此功能(查找大列表中的哪些项目,以及哪些项目在另一个大列表中)


`您可以使用列表理解作为下面给出的代码基础。如上文所述,使用现有数据库的ID列表和ADSCRAE dict

代码库:
new_adds_ids=[ad for ad in adscrape if ad['id']not in database_ids]`

`您可以使用列表理解作为下面给出的代码基础。如上文所述,使用现有数据库的ID列表和ADSCRAE dict

代码库:
new_adds_ids=[ad for ad in adscrape if ad['id']不在数据库_ids]`

您可以将
ids_map
构建为
dict
,并通过访问该ids_map中的键检查列表中的id是否存在,如下面的代码段所示:

database_ids = ['id1','id2','id3']
ad = {'id': u'OAG-AD-12371713', 'body': u'\xa0SUV', 'loc': u'SA', 'last scan': '06/02/16', 'eng': u'\xa06cyl 2.7L ', 'make': u'Hyundai', 'year': u'2006', 'first scan': '06/02/16', 'odo': u'168911', 'active': 'Y', 'adtype': u'Dealer: Used Car', 'model': u'Tucson Auto 4x4 ', 'trans': u'\xa0Automatic', 'price': u'9990'}

#build ids map
ids_map = dict((k, v) for v, k in enumerate(database_ids))

for ad in adscrape:
    # some logic before checking whether id in database_ids
    try:
        ids_map[ad['id']]
    except KeyError:
        pass
    else:
        #error not thrown perform logic for existed ids
        print 'id %s in list' % ad['id']

您可以将
ids\u映射
构建为
dict
,并通过访问该ids\u映射中的键来检查列表中是否有id,如下面的代码片段所示:

database_ids = ['id1','id2','id3']
ad = {'id': u'OAG-AD-12371713', 'body': u'\xa0SUV', 'loc': u'SA', 'last scan': '06/02/16', 'eng': u'\xa06cyl 2.7L ', 'make': u'Hyundai', 'year': u'2006', 'first scan': '06/02/16', 'odo': u'168911', 'active': 'Y', 'adtype': u'Dealer: Used Car', 'model': u'Tucson Auto 4x4 ', 'trans': u'\xa0Automatic', 'price': u'9990'}

#build ids map
ids_map = dict((k, v) for v, k in enumerate(database_ids))

for ad in adscrape:
    # some logic before checking whether id in database_ids
    try:
        ids_map[ad['id']]
    except KeyError:
        pass
    else:
        #error not thrown perform logic for existed ids
        print 'id %s in list' % ad['id']

要设置的数据库_id将非常多faster@xfx从上面的列表中形成
set
需要一段时间,而且我认为它已经设置好了,因为id是唯一的…正如我所知,检查列表中项目的最快方法是,如果列表中的项目,“@AndriyIvaneyko列表中的项目没有设置,即使它的项目是唯一的,也要这样做。使用database_ids=set(database_ids)@AndriyIvaneyko你将花费更多的时间反复进行列表查找,而不是构建一个集合开始。这是硬编码的吗?为什么要“花一段时间做一套”?如果它是硬编码的(这似乎很荒谬),那么将源代码更改为
数据库\u id={'id1','id2','id3',…}
。设置数据库\u id将非常有用faster@xfx从上面的列表中形成
set
,需要一段时间,另外,我认为它已经设置好了,因为id是唯一的……据我所知,检查列表中项目的最快方法是,如果列表中的项目没有设置,即使它的项目是唯一的,
。@AndriyIvaneyko列表也没有设置。使用database_ids=set(database_ids)@AndriyIvaneyko你将花费更多的时间反复进行列表查找,而不是构建一个集合开始。这是硬编码的吗?为什么要“花一段时间做一套”?如果它是硬编码的(这似乎很荒谬),那么将源代码更改为
数据库_id={'id1','id2','id3',…}
。请使用“代码示例”按钮格式化答案中的任何代码。请使用“代码示例”按钮格式化答案中的任何代码。