2

When iterating through a dictionary, I want to skip an item if it has a particular key. I tried something like mydict.next(), but I got an error message 'dict' object has no attribute 'next'

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

I am using Python 2.7 if that matters.

4

4 回答 4

13

使用continue

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

另见:

于 2013-08-09T20:27:53.340 回答
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/

于 2013-08-09T20:44:49.010 回答
4

另一种选择是:

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

它与用 跳过键的作用相同continue。if 语句下的代码只有在 key 不是 时才会运行'skipthis'

这种方法的优点是更干净,节省线路。在我看来,阅读也更好一些。

于 2013-08-09T20:29:28.200 回答
2

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

这些方面的东西:

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.
于 2013-08-09T20:53:59.517 回答