Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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和Python2中的delete,没有错误吗?_Python_Python 2.7 - Fatal编程技术网

生成器中的iteritems和Python2中的delete,没有错误吗?

生成器中的iteritems和Python2中的delete,没有错误吗?,python,python-2.7,Python,Python 2.7,我有一种很奇怪的担心,就是这样: for k, v in ((k, v) for k, v in mydict.iteritems() if v.update): print k del mydict[k] 我非常清楚,我们不应该在迭代过程中更改字典的键。 但我预期会出现“运行时错误:字典在迭代过程中改变了大小”而什么都没有。 我有时得到一个值,有时什么都没有 Osx上的Python v2.7.10 给我休息一下: >>> mydict = {'a':1, '

我有一种很奇怪的担心,就是这样:

for k, v in ((k, v) for k, v in mydict.iteritems() if v.update):
    print k
    del mydict[k]
我非常清楚,我们不应该在迭代过程中更改字典的键。 但我预期会出现“运行时错误:字典在迭代过程中改变了大小”而什么都没有。 我有时得到一个值,有时什么都没有

Osx上的Python v2.7.10

给我休息一下:

>>> mydict = {'a':1, 'b':10}
>>> for k, v in ((k, v) for k, v in mydict.iteritems() if v > 5):
...     print k
...     del mydict[k]
b
---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
...
显然,将其更改为
items()
可以解决此问题:

>>> mydict = {'a':1, 'b':10}
>>> for k, v in ((k, v) for k, v in mydict.items() if v > 5):
...     print k
...     del mydict[k]
b
>>> mydict
{'a': 1}
但循环内部的条件更干净:

>>> mydict = {'a':1, 'b':10}
>>> for k, v in mydict.items():
...     if v > 5:
...         print k
...         del mydict[k]
b
>>> mydict
{'a': 1}
或听写理解:

>>> mydict = {'a':1, 'b':10}
>>> {k: v for k, v in mydict.iteritems() if not v > 5}
{'a': 1}

我修改了我的问题,因为我刚刚意识到这是产生这个结果的delete方法。我没有表现出相同的行为——如果任何东西被删除,我会得到一个运行时错误。显然,从<代码>迭代器()>代码>到<代码>项目>(或)>将在Py2.Xi中解决这个问题,也在这里测试您的代码,更改<代码> V.Uptudio。因为我不知道您在那里使用了什么样的对象,并且我得到了一个运行时错误:字典在迭代期间改变了大小。我正在使用python 2.7yes update是对象v的属性(设置为True或False)好的,我找到了罪魁祸首,在线程池中没有引发错误…抱歉,我忘了提及它。。。我是否要更改主题的名称?这是我的第一次,或者它被举起但被默默地处理:)