You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python 2.7中使用tqdm遍历字典显示进度条的正确方法

解决Python 2.7中tqdm遍历字典时的进度条报错问题

你遇到的问题核心是tqdm的参数传递方式不正确。在Python 2.7适配的tqdm版本中,第二个位置参数并非用来指定迭代总长度,你需要通过**关键字参数total**来明确总次数。

正确的实现代码

from tqdm import tqdm

d = {'k1':1, 'k2':2}
for k, v in tqdm(d.items(), total=len(d)):
    print 'foo'
    a = 1 + 100
    print 'bar'

为什么原来的列表写法能工作?

你之前遍历列表时用for i in tqdm(l, len(l))能正常运行,其实是个巧合:因为列表是可直接获取len()的可迭代对象,tqdm本身就能自动识别它的长度,即使你多传了一个长度参数,旧版本tqdm可能忽略了这个多余的位置参数,或者误打误撞适配了。但字典的items()在Python 2.7中虽然也返回列表,不过当你把长度作为第二个位置参数传递时,会和tqdm的其他位置参数(比如描述文本desc)冲突,最终导致报错。

更规范的写法其实可以省略total参数(只要可迭代对象能被tqdm自动获取长度),比如:

# 遍历列表的规范写法
for i in tqdm(l):
    # 执行操作

# 遍历字典的规范写法
for k, v in tqdm(d.items()):
    # 执行操作

不过如果遇到生成器这类无法自动获取长度的可迭代对象,就必须用total=xxx来指定总迭代次数。

内容的提问来源于stack exchange,提问作者Monica Heddneck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:46:26