Согласно вашей логике, ваш код теперь будет выполнять следующее (псевдо):
foreach key & value: add the key as a th,
then loop the value (because it is an array):
add a new table row with a table cell with that 'nested' value.
Это приведет к следующему выводу:
a
0
1
2
b
0
1
2
c
0
1
2
То, что вы хотите сделать, это (псевдо):
Create a tr for the headers
Loop all keys: add headers for all keys (a, b and c)
Foreach row (remember i (iterator))
add a tr
for each key (col) add value[i] as a td
Close the tr
Close the table tag
Я сделаю все возможное, написав это в вашем коде (глядя на предоставленный вами фрагмент). Примечание: не проверял это.
<table id="myTable">
<tr>
{% for k,v in results.items() %}
<th> {{ k }}</th>
{% endfor %}
</tr>
{% for i in range(0, len(results[a])) %}
<tr>
{% for k,v in results.items() %}
<td>v[i]</td>
{% endfor %}
</tr>
{% endfor %}
</table>
Существуют также библиотеки, которые делают это для вас: https://www.decalage.info/python/html (например)