如何将列表的dict格式化为表格

Aar*_*ron 4 python formatting

我有一个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得到.

Rob*_*obᵩ 8

你可以用PrettyTable.

  • 我对键进行了排序,并对值进行了排序.这产生了可预测的输出.
  • 我之所以选择PrettyTable,是因为它可以在Ubuntu中安装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)