python dict 坑
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}
>>>