python2字典遍历方法性能对比

在公司服务器上跑python2程序时,使用了 tqdm(d.items()) 来包裹字典,发现进度条一直卡在0%不动,怀疑是 d.items() 取出所有的元素作为列表返回,而不是迭代器,导致耗时非常长。在此做一下性能测试,代码如下:

import random
import time
from tqdm import tqdm


def construct_large_dict(length=25000000, size=3):
    d = {}
    for i in tqdm(range(length)):
        l = []
        for _ in range(size):
            l.append(random.randint(0, 100))
        d[i] = l
    return d


if __name__ == "__main__":
    d = construct_large_dict()

    total = 0
    start = time.time()
    for key in d:
        total += sum(d[key])
    end1 = time.time()
    print("method-1 time: {}".format(end1 - start))

    total = 0
    for k, v in d.items():
        total += sum(v)
    end2 = time.time()
    print("method-2 time: {}".format(end2 - end1))

    total = 0
    for k, v in d.iteritems():
        total += sum(v)
    end3 = time.time()
    print("method-3 time: {}".format(end3 - end2))
  

结果如下:
result
因此在遍历大字典时,推荐使用第一种或者第三种方式,进度条展示的时候也更人性化。

在python3中,已经用 d.items() 代替了 d.iteritems() ,因此无需再担心性能问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值