Reputation: 283
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 !
Upvotes: 6
Views: 30718
Reputation: 831
Below is function to convert a Python dictionary into HTML table
def create_html_table_from_dictionary(dict):
table_header = ''
table_data = ''
for item in dict.items():
table_header += f'<th>{item[0]}</th>'
table_data += f'<td>{item[1]}</td>'
html_table = f"""<style> table, th, td {{border: 1px solid black; }} </style><table><tr>{table_header}</tr><tr>{table_data}</tr></table>"""
return html_table
It creates 2 rows, header=dictionary_key, row_data = dictionary_value
Upvotes: 0
Reputation: 1247
Had quite a thorough search regarding this issue. By far the best solution I found was the prettytable package courtesy of Google. I'd give an example, but the ones in the link are comprehensive.
Upvotes: 1
Reputation: 25536
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]))}}
Upvotes: 5
Reputation: 13709
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
Upvotes: 4
Reputation: 2210
Something like
d = {'Retry': ['30', '12', '12'], 'Station MAC': ['aabbccddeea', 'ffgghhiijj', 'kkllmmnnoo'], 'Download': ['70.', '99', '90']}
keys = d.keys()
length = len(d[keys[0]])
items = ['<table style="width:300px">', '<tr>']
for k in keys:
items.append('<td>%s</td>' % k)
items.append('</tr>')
for i in range(length):
items.append('<tr>')
for k in keys:
items.append('<td>%s</td>' % d[k][i])
items.append('</tr>')
items.append('</table>')
print '\n'.join(items)
Upvotes: 3