提高iteritems的性能或者更好的方法来遍历python字典

2024-06-11 21:48:06 发布

您现在位置:Python中文网/ 问答频道 /正文

在配备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

我做了一个追踪,发现整个回路是13960 x 19040~2比尔。在

^{pr2}$

xDict看起来像这样(一个示例):

xDict = {(19, 4, 118): [19, 4, 4], (4, 12, 25): [4, 12, 7], (15, 19, 121): [15, 19, 21], (23, 5, 219): [23, 5, 9], (13, 5, 19): [13, 5, 1]}                 

我正试图从字典中找出一个键的值。有什么改进的地方吗?在


对不起,我想我知道发生了什么。在

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秒


Tags: inforifcountokvalactivitynum
1条回答
网友
1楼 · 发布于 2024-06-11 21:48:06

不要只为了找到一个键而遍历所有项目。请改用成员资格测试:

if (m, l, k) in xDict:
    om, ol, ok = xDict[m, l, k]

这就不需要为19040次迭代循环13960个项目。在

如果您也在使用ml和{}来实现其他功能,那么您还没有告诉我们您要在这里实现什么,但是请考虑只在键上循环;这样您就可以将这一循环减少到13960个项目,而不是19040个迭代。在

相关问题 更多 >