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
循环中。
需要一点帮助或至少指出正确的方向。 我正在编写一个小函数,它应该以漂亮的格式打印字典的内容。
这是代码示例:
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
循环中。