提高iteritems性能或更好地循环使用python字典
在配备Intel i5、8GB和Windows 7的笔记本电脑上完成以下循环大约需要190秒提高iteritems性能或更好地循环使用python字典,python,python-2.7,Python,Python 2.7,在配备Intel i5、8GB和Windows 7的笔记本电脑上完成以下循环大约需要190秒 count = 0 for l in xrange(NUM_ROOM): for k in xrange(NUM_SLOT): for m in xrange(NUM_ACTIVITY): count = count+1 for dk, [om, ol, ok] in xDict.iteritems():
count = 0
for l in xrange(NUM_ROOM):
for k in xrange(NUM_SLOT):
for m in xrange(NUM_ACTIVITY):
count = count+1
for dk, [om, ol, ok] in xDict.iteritems():
if dk == (m,l,k):
# do something
我做了一个跟踪,发现总循环是13960x19040~2bils
len(self.xDict): 13960
count: 19040
xDict如下所示(示例):
我正试图得到字典中某个键的值。是否有改进性能的方法
对不起,我想我知道发生了什么
count = 0
for l in xrange(NUM_ROOM):
for k in xrange(NUM_SLOT):
for m in xrange(NUM_ACTIVITY):
count = count+1
val = xDict.get((m,l,k))
if val != None:
[om, ol, ok] = val
# do something
现在需要1秒。不要为了找到一个键而循环所有项目。改为使用成员资格测试:
if (m, l, k) in xDict:
om, ol, ok = xDict[m, l, k]
这样就不需要为每个19040迭代循环13960个项目
你没有告诉我们你要在这里实现什么,如果你使用的是<代码> M <代码> > <代码> L>代码>和<代码> k>代码>,也可以考虑只在键上循环。通过这种方式,您可以将其减少为13960个项目的循环,而不是19040次迭代。
IMHO有点不清楚您创建循环的“值”是什么。if (m, l, k) in xDict:
om, ol, ok = xDict[m, l, k]