Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Generate HTML Table from Python Dictionary

How would I convert below dictionary into html table

  {'Retry': ['30', '12', '12'] 'Station MAC': ['aabbccddeea', 'ffgghhiijj', 'kkllmmnnoo'] Download': ['70.', '99', '90'] }

Html table format I am trying to achieve is

Retry       MAC         Download
  30      aabbccddee        70
  12      ffgghhiijj        99
  12      kkllmmnnoo        90

I have written css for table with border and everything, but data is not getting filled correctly. I am trying this with web2py. But Finding difficult to write logic to print above dictionary in table format.

Thanks !

like image 953
Error_Coding Avatar asked Apr 04 '14 22:04

Error_Coding


2 Answers

You can make it a little easier by using the web2py TABLE and TR helpers:

In the controller:

def myfunc():
    d = {'Retry': ['30', '12', '12'],
         'Station MAC': ['aabbccddeea', 'ffgghhiijj', 'kkllmmnnoo'],
         'Download': ['70.', '99', '90']}
    colnames = ['Retry', 'Station MAC', 'Download']
    rows = zip(*[d[c] for c in colnames])
    return dict(rows=rows, colnames=colnames)

And in the view:

{{=TABLE(THEAD(TR([TH(c) for c in colnames])),
         [TR(row) for row in rows]))}}
like image 104
Anthony Avatar answered Sep 22 '22 01:09

Anthony


Using a dict won't maintain the order of your columns but if you are ok with that then this example will work

data = {'Retry': ['30', '12', '12'],
        'Station MAC': ['aabbccddeea', 'ffgghhiijj', 'kkllmmnnoo'],
        'Download': ['70.', '99', '90']}

html = '<table><tr><th>' + '</th><th>'.join(data.keys()) + '</th></tr>'

for row in zip(*data.values()):
    html += '<tr><td>' + '</td><td>'.join(row) + '</td></tr>'

html += '</table>'

print html
like image 35
John Avatar answered Sep 21 '22 01:09

John