Error_Coding
Error_Coding

Reputation: 283

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 !

Upvotes: 6

Views: 30718

Answers (5)

Aashutosh Kumar
Aashutosh Kumar

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

Mullefa
Mullefa

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

Anthony
Anthony

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

John
John

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

christianbrodbeck
christianbrodbeck

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

Related Questions