python 字典和 prettytable 模块

python dictionary and prettytable module

需要一点帮助或至少指出正确的方向。 我正在编写一个小函数,它应该以漂亮的格式打印字典的内容。

这是代码示例:

head = ["HOSTNAME", "OS", "PROTOCOL"]

data = {
    'server1': ['ESXi', 'FC'],
    'server2': ['ESXi', 'FC'],
    'server3': ['ESXi', 'FC'],
}

def printify_table(header, data, align='c'):

    x = PrettyTable()
    x.field_names = header
    x.align = align

    for k, v in data.items():
        x.add_row([k, v[0], v[1]])
    print(x)


printify_table(head, data)

结果: pythonx.py

+----------+------+----------+
| HOSTNAME |  OS  | PROTOCOL |
+----------+------+----------+
| server1  | ESXi |    FC    |
| server2  | ESXi |    FC    |
| server3  | ESXi |    FC    |
+----------+------+----------+

这现在工作正常,因为我有静态字典值。 没问题!

问题|问题: 现在,如果我面对每个键的不同数量的值,调整代码的 pythonic 方法是什么?

万一遇到这样的事情呢?

data = {
    'server1': ['ESXi'],
    'server2': ['ESXi', 'FC'],
    'server3': ['ESXi', 'FC','iSCI],
}

线下如何调整?

  x.add_row([k, v[0], v[1]]

我尝试使用理解列表,但不知何故我很难将其合并。 感谢任何反馈。

您可以在列表中使用 * 解包。

>>> a = [3, 4, 5]
>>> b = [1, 2, *a]
>>> b
[1, 2, 3, 4, 5]

对于你的情况,这将是 add_row([k, *v])

感谢您提出一个很好的问题,如果人们能更像 Python 人一样思考,世界会变得更美好。我认为下面的代码片段会起作用:

v.extend(['']*(30-len(v)))

将其插入您的 for 循环中。