python dict 两种遍历方式的比较

关于纠结dict遍历中带括号与不带括号的性能问题

1 for (d,x) in dict.items():
2     print "key:"+d+",value:"+str(x)
3 
4 for d,x in dict.items():
5     print "key:"+d+",value:"+str(x)

带括号和不带括号性能测试结果:

     1 测试条数:15
     2 带括号开始时间:2012-06-14 12:13:37.375000
     3 带括号结束时间:2012-06-14 12:13:37.375000
     4 时间间隔:0:00:00
     5 不带括号开始时间:2012-06-14 12:13:37.375000
     6 不带括号结束时间:2012-06-14 12:13:37.375000
     7 时间间隔:0:00:00
     8 
     9 测试条数:50
    10 带括号开始时间:2012-06-14 12:13:57.921000
    11 带括号结束时间:2012-06-14 12:13:57.921000
    12 时间间隔:0:00:00
    13 不带括号开始时间:2012-06-14 12:13:57.921000
    14 不带括号结束时间:2012-06-14 12:13:57.937000
    15 时间间隔:0:00:00.016000
    16 测试条数:100
    17 带括号开始时间:2012-06-14 11:53:57.453000
    18 带括号结束时间:2012-06-14 11:53:57.468000
    19 时间间隔:0:00:00.015000
    20 不带括号开始时间:2012-06-14 11:53:57.468000
    21 不带括号结束时间:2012-06-14 11:53:57.531000
    22 时间间隔:0:00:00.063000
    23 
    24 测试条数:150
    25 带括号开始时间:2012-06-14 12:00:54.812000
    26 带括号结束时间:2012-06-14 12:00:54.828000
    27 时间间隔:0:00:00.016000
    28 不带括号开始时间:2012-06-14 12:00:54.828000
    29 不带括号结束时间:2012-06-14 12:00:54.921000
    30 时间间隔:0:00:00.093000
    31 
    32 测试条数:200
    33 带括号开始时间:2012-06-14 11:59:54.609000
    34 带括号结束时间:2012-06-14 11:59:54.687000
    35 时间间隔:0:00:00.078000
    36 不带括号开始时间:2012-06-14 11:59:54.687000
    37 不带括号结束时间:2012-06-14 11:59:54.734000
    38 时间间隔:0:00:00.047000
    39 
    40 测试条数:500
    41 带括号开始时间:2012-06-14 11:54:39.906000
    42 带括号结束时间:2012-06-14 11:54:40.078000
    43 时间间隔:0:00:00.172000
    44 不带括号开始时间:2012-06-14 11:54:40.078000
    45 不带括号结束时间:2012-06-14 11:54:40.125000
    46 时间间隔:0:00:00.047000
    47 
    48 测试条数:1000
    49 带括号开始时间:2012-06-14 11:54:49.171000
    50 带括号结束时间:2012-06-14 11:54:49.437000
    51 时间间隔:0:00:00.266000
    52 不带括号开始时间:2012-06-14 11:54:49.437000
    53 不带括号结束时间:2012-06-14 11:54:49.609000
    54 时间间隔:0:00:00.172000
    55 
    56 测试条数:2000
    57 带括号开始时间:2012-06-14 11:54:58.921000
    58 带括号结束时间:2012-06-14 11:54:59.328000
    59 时间间隔:0:00:00.407000
    60 不带括号开始时间:2012-06-14 11:54:59.328000
    61 不带括号结束时间:2012-06-14 11:54:59.687000
    62 时间间隔:0:00:00.359000
    63 
    64 测试条数:5000
    65 带括号开始时间:2012-06-14 11:55:05.781000
    66 带括号结束时间:2012-06-14 11:55:06.734000
    67 时间间隔:0:00:00.953000
    68 不带括号开始时间:2012-06-14 11:55:06.734000
    69 不带括号结束时间:2012-06-14 11:55:07.609000
    70 时间间隔:0:00:00.875000
    71 
    72 测试条数:10000
    73 带括号开始时间:2012-06-14 11:55:15.656000
    74 带括号结束时间:2012-06-14 11:55:17.390000
    75 时间间隔:0:00:01.734000
    76 不带括号开始时间:2012-06-14 11:55:17.390000
    77 不带括号结束时间:2012-06-14 11:55:19.109000
    78 时间间隔:0:00:01.719000
    79 
    80 测试条数:20000
    81 带括号开始时间:2012-06-14 12:19:14.921000
    82 带括号结束时间:2012-06-14 12:19:18.593000
    83 时间间隔:0:00:03.672000
    84 不带括号开始时间:2012-06-14 12:19:18.593000
    85 不带括号结束时间:2012-06-14 12:19:22.218000
    86 时间间隔:0:00:03.625000

我们可以看出,dict条数在200一下的时候是带括号的性能比较高一点,但是在200条以上的数据后不带括号的执行时间会少些.

下面是测试代码:

测试Code
#-- coding: utf-8 --
import datetime,codecs

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))+"\r\n")
write("带括号开始时间:")
a=datetime.datetime.now()
s.write(str(a)+"\r\n")

for (d,x) in dict.items():
    print "key:"+d+",value:"+str(x)
write("带括号结束时间:")
b=datetime.datetime.now()
write(str(b)+"\r\n")
write("时间间隔:")
write(str(b-a)+"\r\n")

write("不带括号开始时间:")
c=datetime.datetime.now()
write(str(c)+"\r\n")
for d,x in dict.items():
    print "key:"+d+",value:"+str(x)
write("不带括号结束时间:")
d=datetime.datetime.now()
write(str(d)+"\r\n")
write("时间间隔:")
write(str(d-c)+"\r\n")
write("\r\n")
s.close()
展开阅读全文

没有更多推荐了,返回首页