python两种遍历字典(dict)的方法比较
python以其优美的语法和方便的内置数据结构,赢得了不少程序员的亲睐。 复制代码 代码如下: #这里初始化一个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,'d':0} #d.keys() 是一个下标的数组 >>> d.keys() ['a','c','b','d'] #这样遍历,就没问题了,因为其实其实这里遍历的是d.keys()这个list常量。 >>> for k in d.keys(): ... if d[k] == 0: ... del(d[k]) ... >>> d {'a': 1,'c': 1} #结果也是对的 >>> 其实,这个例子是我简化过的,我是在一个多线程的程序里发现这个问题的,所以,我的建议是:遍历dict的时候,养成使用 for k in d.keys() 的习惯。 不过,如果是多线程的话,这样就绝对安全吗?也不见得:当两个线程都取完d.keys()以后,如果两个线程都去删同一个key的话,先删的会成功,后删的那个肯定会报 KeyError ,这个看来只能通过其他方式来保证了。
关于纠结dict遍历中带括号与不带括号的性能问题 复制代码 代码如下: for (d,x) in dict.items(): print "key:"+d+",value:"+str(x) for d,x in dict.items(): print "key:"+d+",value:"+str(x) 带括号和不带括号性能测试结果: 复制代码 代码如下: 测试结果 测试条数:15 带括号开始时间:2012-06-14 12:13:37.375000 带括号结束时间:2012-06-14 12:13:37.375000 时间间隔:0:00:00 不带括号开始时间:2012-06-14 12:13:37.375000 不带括号结束时间:2012-06-14 12:13:37.375000 时间间隔:0:00:00 测试条数:50 测试条数:150 测试条数:200 测试条数:500 测试条数:1000 测试条数:2000 测试条数:5000 测试条数:10000 测试条数:20000
下面是测试代码: 复制代码 代码如下: 测试Code #-*- coding: utf-8 -*- import datetime,codecs dict = {} for i in xrange(0,20000): s=codecs.open(r'c:dict.txt','a','utf-8') def write(des): write("测试条数:") for (d,x) in dict.items(): write("不带括号开始时间:") 中文乱码问题有没有很好的解决办法....? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |