Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
提高iteritems性能或更好地循环使用python字典_Python_Python 2.7 - Fatal编程技术网

提高iteritems性能或更好地循环使用python字典

提高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():

在配备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(): 
                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]