[英]Progress bar with tqdm while iterating over the items in a python dictionary
如果我在遍历 dict 时尝试获取进度条,我该如何使用 tqdm 执行此操作? 我正在使用 Python 2.7。
这适用于列表:
for i in tdqm(l, len(l):
<do stuff>
但是失败了 dicts:
for k, v in tqdm(d.items(), len(d)):
<do stuff>
使用 dicts 执行此操作的正确方法是什么?
这是一个真实的例子:
d = {'k1':1, 'k2':2}
for k, v in tqdm(d.items(), len(d)):
print 'foo'
a = 1 + 100
print 'bar'
我得到:
-------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-30-7e4ce2b85414> in <module>()
1 d = {'k1':1, 'k2':2}
----> 2 for k, v in tqdm(d.items(), len(d)):
3 print 'oasdlkfj'
4 a = 1 + 100
5 print 'y'
/home/monica/anaconda2/envs/pytorch_p27/lib/python2.7/site-packages/tqdm/_tqdm.pyc in __init__(self, iterable, desc, total, leave, file, ncols, mininterval, maxinterval, miniters, ascii, disable, unit, unit_scale, dynamic_ncols, smoothing, bar_format, initial, position, postfix, unit_divisor, gui, **kwargs)
810 if self.pos:
811 self.moveto(self.pos)
--> 812 self.sp(self.__repr__(elapsed=0))
813 if self.pos:
814 self.moveto(-self.pos)
/home/monica/anaconda2/envs/pytorch_p27/lib/python2.7/site-packages/tqdm/_tqdm.pyc in __repr__(self, elapsed)
842 self.desc, self.ascii, self.unit,
843 self.unit_scale, 1 / self.avg_time if self.avg_time else None,
--> 844 self.bar_format, self.postfix, self.unit_divisor)
845
846 def __lt__(self, other):
/home/monica/anaconda2/envs/pytorch_p27/lib/python2.7/site-packages/tqdm/_tqdm.pyc in format_meter(n, total, elapsed, ncols, prefix, ascii, unit, unit_scale, rate, bar_format, postfix, unit_divisor)
288 if prefix:
289 # old prefix setup work around
--> 290 bool_prefix_colon_already = (prefix[-2:] == ": ")
291 l_bar = prefix if bool_prefix_colon_already else prefix + ": "
292 else:
TypeError: 'int' object has no attribute '__getitem__'
您对tqdm
使用是错误的。 根据文档,您指定的第二个参数是desc
。 您需要使用字符串作为第二个位置参数。 如果你想使用 total 参数作为第二个参数,你应该像这样传递它的键: for k, v in tqdm.tqdm(d.items(),total=len(d)):
所以基本上,它的工作原理是通常用于字典和列表:
for k, v in tqdm.tqdm(d.items()): do stuff
然后您可以使用可选参数,请参阅链接
tqdm是最受欢迎的选项,还有其他选项,其中之一是progress_bar progress_bar非常简单,可以很好地适应不同的情况。 你只需要把你的迭代器包装在里面,就是这样。
from fastprogress.fastprogress import progress_bar
{key:value for key, value in progress_bar(dict.items())}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.