我有一个dict包含字符串列表,并希望将所有内容作为表格打印在终端中,格式如下:
+----------------------------------------------+
| key1 | key2 | key3 | key4 |
+----------------------------------------------+
| val_1 | val_1 | val_1 | val_1 |
|----------|----------|-----------|------------|
| val_2 | val_2 | val_2 | val_2 |
+----------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
等等
有一个惊人的模块或一个简单的方法来实现这一目标吗?我有一个列宽,我通过找到每个列表中最长的val得到.
你可以用PrettyTable.
apt-get install python-prettytable..
#! /usr/bin/env python
from prettytable import PrettyTable
d1 = {
"key1":["val1_1", "val1_2"],
"key2":["val2_1", "val2_2"],
"key3":["val3_1", "val3_2"],
"key4":["val4_1", "val4_2"],
}
table = PrettyTable()
for key,val in sorted(d1.iteritems()):
table.add_column(key, sorted(val))
print table
Run Code Online (Sandbox Code Playgroud)
结果是:
$ ./t
+--------+--------+--------+--------+
| key1 | key2 | key3 | key4 |
+--------+--------+--------+--------+
| val1_1 | val2_1 | val3_1 | val4_1 |
| val1_2 | val2_2 | val3_2 | val4_2 |
+--------+--------+--------+--------+
Run Code Online (Sandbox Code Playgroud)
PrettyTable还提供HTML格式.替换为print table:
print table.get_html_string(attributes={"size":"100%", "class":"MyTable"})
Run Code Online (Sandbox Code Playgroud)
你得到:
<table border="1" class="MyTable" size="100%">
<tr>
<th>key1</th>
<th>key2</th>
<th>key3</th>
<th>key4</th>
</tr>
<tr>
<td>val1_1</td>
<td>val2_1</td>
<td>val3_1</td>
<td>val4_1</td>
</tr>
<tr>
<td>val1_2</td>
<td>val2_2</td>
<td>val3_2</td>
<td>val4_2</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)