Как преобразовать словарь списков в HTML-таблицу? - PullRequest
0 голосов
/ 30 мая 2019

У меня есть словарь списка. например:

result = {
    'a': ['x', 'y', 'z'],
    'b': ['p', 'q', 'r'],
    'c': ['m', 'n', 'o']
}

Я хочу, чтобы a, b и c были заголовками моей таблицы и соответствующих списков под этим конкретным столбцом.

Я передал словарь в html от cherrypy, как это возврат tmpl.render (результат = результат)

Дополнительно: Это HTML-код, написанный

<table id="myTable"> {% for k,v in result.items() %}
    <th> {{ k }}</th>
    {% for val in v %}
    <tr>
        <td> {{ val }}</td>
    </tr>
    {% endfor %} {% endfor %}
</table>

1 Ответ

0 голосов
/ 30 мая 2019

Согласно вашей логике, ваш код теперь будет выполнять следующее (псевдо):

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 (например)

...