If I'm trying to get a progress bar while iterating over a dict, how can I do this with tqdm? I'm using Python 2.7.
This works great with lists:
for i in tdqm(l, len(l):
<do stuff>
But fails over dicts:
for k, v in tqdm(d.items(), len(d)):
<do stuff>
What's the proper way to do this with dicts?
Here's a real example:
d = {'k1':1, 'k2':2}
for k, v in tqdm(d.items(), len(d)):
print 'foo'
a = 1 + 100
print 'bar'
I get:
-------------------------------------------------------------------
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__'
To use an infinite loop with tqdm you need to change your while loop into an infinite for loop by utilizing a generator.
In Arabic, tqdm (taqadum) means progress, and it is used to create a smart progress bar for the loops. You just need to wrap tqdm on any iterable - tqdm(iterable).
Instead of printing out indices or other info at each iteration of your Python loops to see the progress, you can easily add a progress bar. wrap the object on which you iterate with pbar() . and it will display a progress that automatically updates itself after each iteration of the loop.
Your usage of tqdm
is wrong. The second argument you're specifying is desc
according to the documentation. You need to use a string as a second positional argument. If you want to use the total argument as second, you should pass it with its key like that:
for k, v in tqdm.tqdm(d.items(),total=len(d)):
So basically, it works as usual for dictionaries as for lists:
for k, v in tqdm.tqdm(d.items()):
do stuff
You can then use optional arguments, refer to the link
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With