我有两个数据结构:列表和defaultdict字典。该列表包含300,000个数字的无序序列,并且字典包含与具有相应值(一些小整数)的键相同的数字(不是相同的顺序)。例如,列表可能是这样的:l = [500,800,1500]然后相应的字典就像d = {800:3,1500:1,500:4}。我的目标是创建另一个列表,该列表只包含字典d中每个键的相应值,顺序为l。对于简单的例子,我想要返回[4,3,1](不是[3,1,4])。我有一些天真的代码可以运行,但需要花费很长时间来运行300,000个数字。
以下是我所拥有的:
for k,v in d.iteritems():
for i in xrange(len(l)):
if(l[i]==k):
out[i]=v
有什么方法可以提高效率吗?
答案 0 :(得分:6)
循环遍历列表中的术语,而不是字典中的键值对:
>>> l = [500,800,1500]
>>> d = {800:3, 1500:1, 500:4}
>>> [d[x] for x in l]
[4, 3, 1]