python dict 坑

2019-07-16  本文已影响0人  爱你的人终究会爱你

dict={"a":"1","b":"2","c":"3"}

for key in dict:

    dict.pop(key)

    print(dict)

错误:dictionary changed size during iteration

所有都有特殊要求,对应到 python 中,就是要使用 dict.key() 做一个拷贝。最后,所有的 Python 容器都不承诺线程安全,你要多线程做这件事,本身就必须得加锁,这也说明了业务代码设计有问题的.

1.     d =dict([(k,v) fork,v ind.iteritems() if v!=0])

如果大于Python>=2.7

还可以用这个写法:

2.    d ={k:v fork,v ind.iteritems() ifv !=0}

#这里初始化一个dict

>>> d ={'a':1, 'b':0, 'c':1, 'd':0}

#本意是遍历dict,发现元素的值是0的话,就删掉

>>> for k in d:

...  if d[k] ==0:

...    del(d[k])

...

Traceback (most recent call last):

 File"<stdin>", line 1, in<module>

RuntimeError: dictionary changed size during iteration

#结果抛出异常了,两个0的元素,也只删掉一个。

>>> d

{'a': 1, 'c': 1, 'd': 0}

>>> d ={'a':1, 'b':0, 'c':1, 'd':0}

#d.keys() 是一个下标的数组

>>> d.keys()

['a', 'c', 'b', 'd']

#这样遍历,就没问题了,因为其实其实这里遍历的是d.keys()这个list常量。

>>> fork in d.keys():

...  if d[k] ==0:

...    del(d[k])

...

>>> d

{'a': 1, 'c': 1}

>>>

上一篇 下一篇

猜你喜欢

热点阅读