我有一个包含字符串列表的 dict ,并且想以如下格式在终端中将所有内容作为表格打印出来:

+----------------------------------------------+
|   key1   |   key2   |   key3    |    key4    |
+----------------------------------------------+
|   val_1  |   val_1  |   val_1   |   val_1    |
|----------|----------|-----------|------------|
|   val_2  |   val_2  |   val_2   |   val_2    |
+----------------------------------------------+

等等。

是否有一个惊人的模块或实现这一目标的简单方法?我有一个列宽列表,通过在每个列表中找到最长的 val 得到。

最佳答案

你可以使用 PrettyTable

  • 我对键进行了排序,并对值进行了排序。这会产生可预测的输出。
  • 我选择 PrettyTable 是因为它可以通过 apt-get install python-prettytable 安装在 Ubuntu 中。

  • .
    #! /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
    

    结果是:
    $ ./t
    +--------+--------+--------+--------+
    |  key1  |  key2  |  key3  |  key4  |
    +--------+--------+--------+--------+
    | val1_1 | val2_1 | val3_1 | val4_1 |
    | val1_2 | val2_2 | val3_2 | val4_2 |
    +--------+--------+--------+--------+
    

    PrettyTable 还提供 HTML 格式。将 print table 替换为:
    print table.get_html_string(attributes={"size":"100%", "class":"MyTable"})
    

    你会得到:
    <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>
    

    10-08 19:38