【问题标题】:python dictionary and prettytable modulepython字典和漂亮的模块
【发布时间】:2022-01-19 12:22:01
【问题描述】:

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

这里是代码示例:

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)

结果: python x.py

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

现在这很好用,因为我有静态 dict 值。 没问题!

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

如果我遇到这样的事情?

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

你是如何调整下线的?

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

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

【问题讨论】:

  • 根据您使用的python版本,您可以使用[k, *v],但是对于固定数量的标题,这将如何工作?
  • 感谢 Holloway,它的 python 3.8 和 *v 正在解决我的(第一个)问题。如此简单但非常有效。再次感谢。是的,标题问题将是下一个:)。

标签: python loops dictionary prettytable


【解决方案1】:

感谢您提出了一个很好的问题,如果人们能够更多地思考 Pythonian,世界将会变得更美好。我认为下面的 sn-p 会起作用:

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

将它插入你的for-loop。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-11-10
      • 1970-01-01
      • 2015-01-12
      • 1970-01-01
      • 2020-01-28
      • 2015-09-09
      • 2016-11-26
      • 2016-09-03
      • 2015-01-10
      相关资源
      最近更新 更多