跳到Dictionary中的下一项

时间:2013-08-09 20:27:02

标签: python python-2.7 dictionary

当迭代字典时,我想跳过一个项目,如果它有一个特定的键。我尝试了mydict.next()之类的内容,但收到了错误消息'dict' object has no attribute 'next'

for key, value in mydict.iteritems():
    if key == 'skipthis':
        mydict.next()
    # for others do some complicated process

如果重要的话,我正在使用Python 2.7。

4 个答案:

答案 0 :(得分:13)

使用continue

for key, value in mydict.iteritems():
    if key == 'skipthis':
        continue

另见:

答案 1 :(得分:5)

我想你想调用mydict.iteritems().next(),但是你应该在迭代之前过滤列表。

要过滤列表,可以使用生成器表达式:

 r = ((k, v) for k, v in mydict.iteritems() if k != 'skipthis')
 for k,v in r:
      #do something complicated to filtered items

因为这是一个生成器表达式,所以它具有仅遍历原始字典一次的属性,导致性能提升超过迭代字典的其他替代方案,并且可选地将元素复制到新字典或从中删除现有元素。生成器也可以被链接,这在迭代时可以是一个强大的概念。

有关生成器表达式的更多信息: http://www.python.org/dev/peps/pep-0289/

答案 2 :(得分:4)

另一种选择是:

for key, value in mydict.iteritems():
    if key != 'skipthis':
        # Do whatever

与使用continue跳过密钥完全相同。 if语句下的代码只有在密钥不是'skipthis'时才会运行。

这种方法的优点是它更清洁并节省了线条。在我看来也更好一点。

答案 3 :(得分:2)

你应该问问题为什么你需要这样做?一个代码单元应该做一件事,所以在这种情况下,循环应该在它到达之前让dict'已清理'。

这些方面的东西:

def dict_cleaner(my_dict):
    #make a dict of stuff you want your loop to deal with
    return clean_dict

for key, value in dict_cleaner(mydict).iteritems():
#Do the stuff the loop actually does, no worrying about selecting items from it.