【发布时间】:2018-02-14 15:54:04
【问题描述】:
我有两个列表,每个列表包含 10-15k 字典。
第一个名为 campaigns 的列表,它包含具有以下结构的字典:
{u'campaign_id': u'400037', u'ctr': u'1.1210', u'roi': 0, u'end_date': None, u'revenue': 0.0, u'website_id': 1, u'enabled': u'active', u'budget': u'100.00', u'default_bid': u'0.05', u'cost': 30.63, u'start_date': u'2018-02-13'}
第二个列表——yesterday_data dict的结构是:
{u'cost': 0.0, u'campaign_id': u'400037', u'revenue': 0.0}
目标是匹配活动 ID,并在 campaigns_data 中的相关字典中添加两个键,其中 yesterday_date["revenue"] 和 yesterday_date["cost"] 将是 campaigns_data 字典中的新键 - yesterday_cost 和 yesterday_revenue
我设法用以下代码实现了这个逻辑:
campaigns = model.get_campaigns_data(self.mysql_db)
yesterday_data = model.get_yesterday_data(self.mysql_db, yesterday)
try:
for campaign in campaigns:
missing = filter(lambda c: c["campaign_id"] == str(campaign["campaign_id"]), yesterday_data)
if not missing:
pass
else:
campaign["yesterday_spend"] = missing[0]["cost"]
campaign["yesterday_revenue"] = missing[0]["revenue"]
但是每个列表中有这么多字典,速度非常慢,而且我想相信,远非实现这一目标的优化方式。 知道如何改进我的代码以获得相同的结果吗?
【问题讨论】:
-
反转字典。使其
campaign_id成为键并映射到每个数据集对应字典的引用,然后您可以循环其中一个并在 O(n) 中完成。
标签: python dictionary optimization