我有以下代码
for key,value in jobs.items():
job = key
jobVector[key] = []
for x in range (0, len(listOfWords)):
if listOfWords[x] in jobs[job]:
jobVector[key].append(1)
else:
jobVector[key].append(0)
我有一个dict,JOBS存储了不同的单词,每个单词都有一个计数。在本例中,计数是不相关的,但假设乔布斯对其中一个键是这样的:
jobs[1] = account, addit, allow, ascertain, associ, avail, career, cellular, chang, coasttocoast, commiss, compani, competit, comput, countri, coupl, credit, custom, demand, develop, driven, dynam, employ, enjoi, ethic, exist, expand, experienc, fastest, flexibl, greet, growth, highperform, independ, individu, internet, knowledg, maintain, market, monitor, opportun, order, outstand, payment, person, phone, place, price, privatelyown, process, product, profession, provid, purchas, pursu, receiv, recommend, repres, resolv, respons, retail, right, selfmotiv, specif, store, support, technolog, territori, thatll, throughout, total, train, uniqu, unpreced, wireless, account, addit, aptitud, avail, bartend, benefit, bestbui, bilingu, cellular, colleg, commiss, commun, comput, consult, cross, custom, dedic, deduct, dental, direct, disabl, discount, effect, enterpris, entir, entrepreneuri, excel, execut, extend, famili, fleet, flexibl, goalori, health, impress, individu, insid, insur, integr, interperson, keyword, liter, longterm, medic, member, negoti, offer, outsid, packag, period, person, pleas, possess, possibl, pound, prefer, prescript, proud, provid, recogn, rentacar, repres, respons, retail, retir, salesman, salesperson, saleswoman, satisfi, shield, shortterm, spanish, spend, spirit, sprint, stand, technic, therefor, tmobil, vehicl, verbal, visit, websit, wireless, wwwjoincellularsalescom
让我们假设listOfWords是这样的:
listOfWords = associ, avail, career, cellular, chang, coasttocoast, commiss, compani, competit, comput, countri, coupl, credit, custom, demand, develop, driven, dynam, employ, enjoi, ethic
我非常想浏览一下listOfWords中的每个单词,看看它是否存在于JOBS dict中每个job的单个job中。如果存在,则存储1,否则将0存储到另一个字典中
他们有没有办法加快速度?它目前可以工作,但在15000个工作数据集上大约需要3分钟
首先,用作业集替换所有这些作业列表可以加快速度。然后,您向我们展示的代码将完全不需要更改,它将神奇地变得更快,因为对集合的
in
测试几乎是即时的,而对列表的in
测试必须检查列表中的每个值通过用直接循环替换
range
循环,使用value
而不是重新查找,并将整个循环转化为理解,您还可以获得一些小的加速和较大的可读性增益:甚至:
另外,如果这是针对python2.x的,请使用
viewitems
(如果不需要2.6或更早版本)或iteritems
(如果需要)而不是items
但实际上,除了使用列表代替集合之外,我怀疑您的数据结构还有一个更大的问题。如果不知道你想用这些东西做什么,很难确定,但我怀疑你可以用另一本字典,把每个工作都键入,让事情变得更清楚更快,这样你就可以立即查找,而不是穷尽地搜索
如果每个作业只能属于一个作业(顺便说一句,这里的术语非常混乱……),那么这只是一个将每个作业映射到其父作业的dict:
如果每个作业可以属于多个作业,则需要将每个作业映射到其所属的作业集:
这样看来,您甚至不需要对任何东西使用
jobVector
,因为快速查找它的元素和使用您预先计算的值一样快相关问题 更多 >
编程相关推荐