как об использовании pandas он делает все job для вас
import pandas
df = pandas.DataFrame.from_dict(data)
html = """<!DOCTYPE html>
<html>
<body>
{body}
</body>
</html>
"""
with open("test.html","w") as file:
file.write(html.format(body=df.to_html(na_rep="0")))
этого результата в таблице
.T
использовать транспонировать таблицу
with open("test2.html","w") as file:
file.write(html.format(body=df.T.to_html(na_rep="0")))
и привести к
без панд, их я бы, как этот
html = """<!DOCTYPE html>
<html>
<body>
{body}
</body>
</html>
"""
table="""
<table border="1" class="dataframe">
<thead>
{thead}
</thead>
<tbody>
{tbody}
</tbody>
</table>
"""
thead="""
<tr style="text-align: right;">
{th}
</tr>
"""
th="""<th>{}</th>\n"""
td="""<td>{}</td>\n"""
tr="""<tr>{}</tr>\n"""
def manual_table(data, colums):
head = thead.format(th= "".join(map(th.format,["Name"]+colums)))
pieces=[]
for autor, value in data.items():
temp = [autor]
temp.extend(value.get(c,0) for c in colums)
pieces.append(tr.format("".join(td.format(x) for x in temp)))
body = "\n".join(pieces)
return table.format(thead=head, tbody=body)
colums="Microsoft Ubuntu IOS Go Solaris C".split()
with open("test3.html","w") as file:
file.write(html.format(body=manual_table(data, colums)))
первый я построю несколько шаблонов, так что я получаю то, что я могу читать в конце концов, затем я выхожу изнутри, заполняя эти шаблоны соответственно и в том порядке, в котором я налагаю переменную colums
.
этот результат в
Одна из проблем с вашим кодом, что вы не забираете значения в правильном порядке, один частичное решение для этого является
colums="Microsoft Ubuntu IOS Go Solaris C".split()
for row in data.values():
table += '<tr><td>' + '</td><td>'.join(str(row.get(c,0)) for c in colums) + '</td></tr>'
Если вы не хотите жестко кодировать имена столбцов, но получите их из данных, вы можете сделать это
>>> {k for v in data.values() for k in v }
{'C', 'IOS', 'Solaris', 'Ubuntu', 'Microsoft', 'Go'}
>>>
о свой вопрос в комментариях, да, можно и очень легко с sum
, как, например,
>>> df
Author1 Author2 Author3
C 248.0 38.0 2.0
Go NaN 38.0 2.0
IOS 24.0 38.0 2.0
Microsoft 248.0 38.0 2.0
Solaris 24.0 NaN NaN
Ubuntu 24.0 38.0 NaN
>>> df["Total"] = df.T.sum()
>>> df
Author1 Author2 Author3 Total
C 248.0 38.0 2.0 288.0
Go NaN 38.0 2.0 40.0
IOS 24.0 38.0 2.0 64.0
Microsoft 248.0 38.0 2.0 288.0
Solaris 24.0 NaN NaN 24.0
Ubuntu 24.0 38.0 NaN 62.0
просто поиграйте с ним, пока вы не получите результат желания, и проверка documentation, чтобы вы знали все игрушки, которые у него есть
Если вы получили сообщение об ошибке, вы должны показать полное сообщение об ошибке.В любом случае, помните, что dict не сохраняет порядок, и я не думаю, что вам нужны 'defaultdic (dict, ...)' –