I need to show my dictionary in table format:
res = OrderedDict([('Release', '3.7.3'), ('REFDB', ['1234', '4567', '4567']), ('URL', ['http://www.test.com', 'http://www.foo.com', 'http://www.bar.com'])])
I am able to print the values in list format with this code
if res:
for key, val in res.items():
print (key, '-''\n', val)
else:
print ('Version not found')
My expected format is -
Release REFDB SVN
3.7.3 12345 http://google.com
232323 http://www.yahoo.com
4343454 http://www.test.com
5454554 http://www.bar.com
Here's one way to do it with zip
and zip_longest
:
from collections import OrderedDict
from itertools import zip_longest
d = OrderedDict([('Release', '3.7.3'), ('REFDB', ['1234', '4567', '4567']), ('URL', ['http://www.test.com', 'http://www.foo.com', 'http://www.bar.com'])])
f = lambda x: x if isinstance(x, list) else [x]
for tup in zip(*d.items()):
for a, b, c in zip_longest(*map(f, tup), fillvalue=''):
print('{:15}{:15}{:15}'.format(a, b, c))
Release REFDB URL
3.7.3 1234 http://www.test.com
4567 http://www.foo.com
4567 http://www.bar.com
You can change the intercolumn spacing in the string formatting if you wish to have or more less spacing.