python以其优美的语法和方便的内置数据结构,赢得了不少程序员的亲睐。
其中有个很有用的数据结构,就是字典(dict),使用非常简单。说到遍历一个dict结构,我想大多数人都会想到 for key in dictobj 的方法,确实这个方法在大多数情况下都是适用的。但是并不是完全安全,请看下面这个例子:
另一篇:dict 两种遍历方式的性能对比
关于纠结dict遍历中带括号与不带括号的性能问题
带括号和不带括号性能测试结果:
测试条数:50
带括号开始时间:2012-06-14 12:13:57.921000
带括号结束时间:2012-06-14 12:13:57.921000
时间间隔:0:00:00
不带括号开始时间:2012-06-14 12:13:57.921000
不带括号结束时间:2012-06-14 12:13:57.937000
时间间隔:0:00:00.016000
测试条数:100
带括号开始时间:2012-06-14 11:53:57.453000
带括号结束时间:2012-06-14 11:53:57.468000
时间间隔:0:00:00.015000
不带括号开始时间:2012-06-14 11:53:57.468000
不带括号结束时间:2012-06-14 11:53:57.531000
时间间隔:0:00:00.063000
测试条数:150
带括号开始时间:2012-06-14 12:00:54.812000
带括号结束时间:2012-06-14 12:00:54.828000
时间间隔:0:00:00.016000
不带括号开始时间:2012-06-14 12:00:54.828000
不带括号结束时间:2012-06-14 12:00:54.921000
时间间隔:0:00:00.093000
测试条数:200
带括号开始时间:2012-06-14 11:59:54.609000
带括号结束时间:2012-06-14 11:59:54.687000
时间间隔:0:00:00.078000
不带括号开始时间:2012-06-14 11:59:54.687000
不带括号结束时间:2012-06-14 11:59:54.734000
时间间隔:0:00:00.047000
测试条数:500
带括号开始时间:2012-06-14 11:54:39.906000
带括号结束时间:2012-06-14 11:54:40.078000
时间间隔:0:00:00.172000
不带括号开始时间:2012-06-14 11:54:40.078000
不带括号结束时间:2012-06-14 11:54:40.125000
时间间隔:0:00:00.047000
测试条数:1000
带括号开始时间:2012-06-14 11:54:49.171000
带括号结束时间:2012-06-14 11:54:49.437000
时间间隔:0:00:00.266000
不带括号开始时间:2012-06-14 11:54:49.437000
不带括号结束时间:2012-06-14 11:54:49.609000
时间间隔:0:00:00.172000
テストストリップの数: 2000
括弧付きの開始時刻:2012-06-14 11:54:58.921000
括弧付きの終了時刻:2012-06-14 11:54:59.328000
時間間隔: 0:00:00.407000
括弧なしの開始時刻:2012-06-14 11:54:59.328000
括弧なしの終了時刻:2012-06-14 11:54:59.687000
時間間隔: 0 : 00:00.359000
テストストリップの数: 5000
括弧付きの開始時刻:2012-06-14 11:55:05.781000
括弧付きの終了時刻:2012-06-14 11:55:06.734000
時間間隔: 0:00:00.953000
括弧なしの開始時刻:2012-06-14 11:55:06.734000
括弧なしの終了時刻:2012-06-14 11:55:07.609000
時間間隔: 0 : 00:00.875000
テストストリップの数: 10000
括弧付きの開始時刻:2012-06-14 11:55:15.656000
括弧付きの終了時刻:2012-06-14 11:55:17.390000
時間間隔: 0:00:01.734000
括弧なしの開始時刻:2012-06-14 11:55:17.390000
括弧なしの終了時刻:2012-06-14 11:55:19.109000
時間間隔: 0 : 00:01.719000
テストストリップの数: 20000
括弧付きの開始時刻:2012-06-14 12:19:14.921000
括弧付きの終了時刻:2012-06-14 12:19:18.593000
時間間隔: 0:00:03.672000
括弧なしの開始時刻:2012-06-14 12:19:18.593000
括弧なしの終了時刻:2012-06-14 12:19:22.218000
時間間隔: 0 : 00:03.625000
辞書項目数が 200 未満の場合は括弧を使用した方がパフォーマンスが高くなりますが、データが 200 個を超えると括弧を使用しない場合の実行時間が短くなることがわかります。
以下はテストコードです:
dict = {}
for i in xrange(0,20000):
dict.setdefault("name"+str(i))
dict["name"+str(i)]="name"
s=codecs.open(r'c:\dict.txt','a', 'utf-8')
def write(des):
s.write(des.decode("utf-8"))
write("テスト項目の数:")
write(str(len(dict))+"rn")
write("括弧付きの開始時刻:")
a=datetime。 datetime .now()
s.write(str(a)+"rn")
for (d,x) in dict.items():
print "key:"+d+",value:"+str(x)
write("括弧付き終了時刻:")
b=datetime.datetime.now()
write(str(b)+"rn")
write("時間間隔:")
write(str(b-a)+"rn")
write("括弧なしの開始時刻:")
c=datetime.datetime.now()
write(str(c)+"rn")
辞書項目の d,x 。 ():
print "key:"+d+",value:"+str(x)
write("括弧なしの終了時刻:")
d=datetime.datetime.now()
write(str(d)+"rn")
write("時間間隔:")
write(str(d-c)+"rn")
write("rn")
s .close()
中国語の文字化けの問題を解決する良い解決策はありますか?