【发布时间】:2017-04-13 00:14:04
【问题描述】:
如果我有以下列表:
headers = ['Name', 'Age']
rows = [['Johnny', 30], ['Zack', 20]]
我可以通过 Jinja2 (https://jsfiddle.net/equbh9du/1/) 轻松制作一张桌子:
<table class="table table-bordered table-hover">
<thead>
<tr>
{% for h in headers %}
<td>{{ h }}</td>
{% endfor %
</tr>
</thead>
<tbody>
{% for row in rows %}
<tr>
{% for item in row %}
<td>{{ item }}</td>
{% endfor %}
</tr>
{% endfor %}
</tbody>
</table>
我注意到将我的数据作为字典返回要容易得多(也更有条理):
d = {'Name': ['Johnny', 'Zack'], 'Age': [30, 20]}
有没有一种简单的方法可以使用这个字典来构建我在上面构建的表格。我想我需要在继续下一列之前完成每一列的迭代(在上面的示例中,我在继续下一行之前完成每一行的迭代)。
这是我到目前为止的代码,但我得到了一张乱七八糟的表 (https://jsfiddle.net/j164fqy9/1/):
<table class="table table-bordered table-hover">
<thead>
<tr>
{% for h in d %}
<td>{{ h }}</td>
{% endfor %
</tr>
</thead>
<tbody>
{% for h, col_values in d.items() %}
{% for item in col_values %}
<tr>
<td>{{ item }}</td>
</tr>
{% endfor %}
{% endfor %}
</tbody>
</table>
编辑:如果 HTML 标准首先阻止向下迭代列,那么我需要从 d 构造 headers 和 rows。下面是执行此操作的最佳方法吗?
headers = [h for h in d]
rows = [[l[i] for h, l in d.items()] for i in range(len(d['Name']))]
【问题讨论】: