当迭代字典时,我想跳过一个项目,如果它有一个特定的键。我尝试了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。
答案 0 :(得分:13)
答案 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.